237 lines
14 KiB
Transact-SQL
237 lines
14 KiB
Transact-SQL
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
|