mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
236 lines
14 KiB
236 lines
14 KiB
USE Winlogon
|
|
|
|
DECLARE @bSendmail bit
|
|
SET @bSendmail = 1
|
|
|
|
DECLARE @SCARD_W_WRONG_CHV bigint
|
|
SET @SCARD_W_WRONG_CHV = -2146434965
|
|
|
|
DECLARE @stMessageBody AS nvarchar(4000), @stMessageBody1 nvarchar(4000)
|
|
SET @stMessageBody = ""
|
|
SET @stMessageBody1 = ""
|
|
|
|
DECLARE @crlf nvarchar(2)
|
|
SET @crlf = CHAR(13) + CHAR(10)
|
|
|
|
DECLARE @Buffer nvarchar(256), @Number nvarchar(5), @Percent nvarchar(3)
|
|
|
|
DECLARE @Checkdate datetime
|
|
SET @Checkdate = DATEADD(day, -8, GETDATE())
|
|
--SET @Checkdate = DATEADD(day, -2, GETDATE())
|
|
|
|
SELECT CARD
|
|
FROM AuthMonitor
|
|
WHERE TIMESTAMP > @Checkdate
|
|
AND CARD <> ""
|
|
|
|
DECLARE @NumCardAuth int
|
|
SET @NumCardAuth = @@ROWCOUNT
|
|
|
|
--
|
|
-- Get number of reader / card operations
|
|
--
|
|
CREATE TABLE #CardReaderAuth
|
|
(
|
|
CARD nvarchar(64),
|
|
READER nvarchar(64),
|
|
FAILURE int,
|
|
NUMBER int
|
|
)
|
|
|
|
DECLARE @iCardHandle int, @stCard nvarchar(64)
|
|
SET @iCardHandle = 0
|
|
EXEC #GetCard @stCard OUTPUT, @iCardHandle OUTPUT
|
|
|
|
WHILE @stCard <> ""
|
|
BEGIN
|
|
|
|
DECLARE @iReaderHandle int, @stReader nvarchar(64)
|
|
SET @iReaderHandle = 0
|
|
EXEC #GetReader @stReader OUTPUT, @iReaderHandle OUTPUT
|
|
|
|
WHILE @stReader <> ""
|
|
BEGIN
|
|
|
|
-- Get number of total operations
|
|
SELECT CARD, READER
|
|
FROM AuthMonitor
|
|
WHERE TIMESTAMP > @Checkdate
|
|
AND CARD = @stCard
|
|
AND READER LIKE @stReader + "%"
|
|
|
|
INSERT INTO #CardReaderAuth VALUES (@stCard, @stReader, 0, @@ROWCOUNT)
|
|
|
|
-- Get number of failures
|
|
SELECT CARD, READER
|
|
FROM AuthMonitor
|
|
WHERE TIMESTAMP > @Checkdate
|
|
AND CARD = @stCard
|
|
AND READER LIKE @stReader + "%"
|
|
AND STATUS <> 0
|
|
AND STATUS <> @SCARD_W_WRONG_CHV
|
|
|
|
INSERT INTO #CardReaderAuth VALUES (@stCard, @stReader, 1, @@ROWCOUNT)
|
|
EXEC #GetReader @stReader OUTPUT, @iReaderHandle OUTPUT
|
|
END
|
|
|
|
EXEC #GetCard @stCard OUTPUT, @iCardHandle OUTPUT
|
|
END
|
|
|
|
--
|
|
-- Create the message for Card / Reader authentications and failures
|
|
--
|
|
DECLARE CardReaderCursor CURSOR FOR
|
|
SELECT CARD, READER, FAILURE, NUMBER
|
|
FROM #CardReaderAuth
|
|
ORDER BY READER ASC, CARD ASC
|
|
|
|
DECLARE @iNumPerCardReaderAuth int, @NumPerCardReaderFailures int
|
|
SET @iNumPerCardReaderAuth = -1
|
|
SET @NumPerCardReaderFailures = -1
|
|
|
|
DECLARE @LastReader nvarchar(64)
|
|
SET @LastReader = ""
|
|
|
|
DECLARE @NumAuth int, @Failure int
|
|
|
|
OPEN CardReaderCursor
|
|
FETCH NEXT FROM CardReaderCursor
|
|
INTO @stCard, @stReader, @Failure, @NumAuth
|
|
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
IF @Failure = 0
|
|
SET @iNumPerCardReaderAuth = @NumAuth
|
|
ELSE
|
|
SET @NumPerCardReaderFailures = @NumAuth
|
|
|
|
IF @iNumPerCardReaderAuth <> -1 AND @NumPerCardReaderFailures <> -1
|
|
BEGIN
|
|
|
|
DECLARE TimerCursor CURSOR FOR
|
|
SELECT STOPWATCH, STATUS
|
|
FROM AuthMonitor
|
|
WHERE TIMESTAMP > @Checkdate
|
|
AND CARD = @stCard
|
|
AND READER LIKE @stReader + "%"
|
|
AND STATUS <> @SCARD_W_WRONG_CHV
|
|
|
|
DECLARE @iStopwatch int, @iStatus int
|
|
|
|
OPEN TimerCursor
|
|
FETCH NEXT FROM TimerCursor
|
|
INTO @iStopwatch, @iStatus
|
|
|
|
DECLARE @iAverageSuccess int, @iNumSuccess int
|
|
DECLARE @iAverageFailure int, @iNumFailure int
|
|
SET @iAverageSuccess = 0
|
|
SET @iNumSuccess = 0
|
|
SET @iAverageFailure = 0
|
|
SET @iNumFailure = 0
|
|
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
IF @iStatus = 0
|
|
BEGIN
|
|
SET @iAverageSuccess = @iAverageSuccess + @iStopwatch
|
|
SET @iNumSuccess = @iNumSuccess + 1
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
SET @iAverageFailure = @iAverageFailure + @iStopwatch
|
|
SET @iNumFailure = @iNumFailure + 1
|
|
END
|
|
|
|
FETCH NEXT FROM TimerCursor
|
|
INTO @iStopwatch, @iStatus
|
|
END
|
|
|
|
CLOSE TimerCursor
|
|
DEALLOCATE TimerCursor
|
|
|
|
IF @iNumPerCardReaderAuth <> 0
|
|
BEGIN
|
|
|
|
IF @stReader <> @LastReader
|
|
BEGIN
|
|
IF LEN(@stMessageBody) > 3000
|
|
BEGIN
|
|
SET @stMessageBody1 = @stMessageBody
|
|
SET @stMessageBody = ""
|
|
SET @LastReader = ""
|
|
END
|
|
|
|
IF @LastReader <> ""
|
|
SET @stMessageBody = @stMessageBody + @crlf
|
|
|
|
EXEC master.dbo.xp_sprintf @Buffer OUTPUT, "%-34s Total | Failures | Times", @stReader
|
|
SET @stMessageBody = @stMessageBody + @Buffer + @crlf +
|
|
REPLICATE("-", 70) + @crlf
|
|
END
|
|
SET @LastReader = @stReader
|
|
|
|
-- Card / reader total
|
|
SET @Number = CAST(@iNumPerCardReaderAuth AS nvarchar(5))
|
|
SET @Percent = CAST(@iNumPerCardReaderAuth * 100 / @NumCardAuth AS nvarchar(3))
|
|
EXEC master.dbo.xp_sprintf @Buffer OUTPUT, " %-34s%5s%4s%%", @stCard, @Number, @Percent
|
|
SET @stMessageBody = @stMessageBody + @Buffer
|
|
|
|
-- Card / reader failures
|
|
SET @Number = CAST(@NumPerCardReaderFailures AS nvarchar(5))
|
|
SET @Percent = CAST(@NumPerCardReaderFailures * 100 / @iNumPerCardReaderAuth AS nvarchar(3))
|
|
EXEC master.dbo.xp_sprintf @Buffer OUTPUT, " | %5s%4s%%", @Number, @Percent
|
|
SET @stMessageBody = @stMessageBody + @Buffer
|
|
|
|
-- Times
|
|
DECLARE @stAverageSuccess nvarchar(5), @stAverageFailure nvarchar(5)
|
|
|
|
IF @iNumSuccess <> 0
|
|
SET @stAverageSuccess = CAST(@iAverageSuccess / @iNumSuccess / 1000 AS nvarchar(5))
|
|
ELSE
|
|
SET @stAverageSuccess = "-"
|
|
|
|
IF @iNumFailure <> 0
|
|
SET @stAverageFailure = CAST(@iAverageFailure / @iNumFailure / 1000 AS nvarchar(5))
|
|
ELSE
|
|
SET @stAverageFailure = "-"
|
|
|
|
EXEC master.dbo.xp_sprintf @Buffer OUTPUT, " | %3s/%3s", @stAverageSuccess, @stAverageFailure
|
|
SET @stMessageBody = @stMessageBody + @Buffer + @crlf
|
|
END
|
|
|
|
SET @iNumPerCardReaderAuth = -1
|
|
SET @NumPerCardReaderFailures = -1
|
|
END
|
|
|
|
FETCH NEXT FROM CardReaderCursor
|
|
INTO @stCard, @stReader, @Failure, @NumAuth
|
|
END
|
|
|
|
CLOSE CardReaderCursor
|
|
DEALLOCATE CardReaderCursor
|
|
|
|
IF @stMessageBody1 = ""
|
|
BEGIN
|
|
SET @stMessageBody1 = @stMessageBody
|
|
SET @stMessageBody = ""
|
|
END
|
|
|
|
IF @bSendmail <> 0
|
|
BEGIN
|
|
EXEC master.dbo.xp_sendmail
|
|
@recipients = 'smcaft',
|
|
@message = @stMessageBody1,
|
|
@subject = 'Smart card self host report - reader/card matrix'
|
|
|
|
IF @stMessageBody <> ""
|
|
EXEC master.dbo.xp_sendmail
|
|
@recipients = 'smcaft',
|
|
@message = @stMessageBody,
|
|
@subject = 'Smart card self host report - reader/card matrix II'
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
PRINT @stMessageBody1 + @crlf
|
|
PRINT @stMessageBody
|
|
END
|