Копирование данных баз Web и Firewall прокси-сервера MS TMG в базу MySQL

от автора

Всем привет!
Удобно смотреть отчёты через браузер, не надо пользователю никакие программы устанавливать.
Для более удобной работы с данными журнала использования Интернета (WEB) и журналом брандмауэра (FWS) сервера MS TMG их можно загрузить в базу MySQL. Можно написать сколько угодно отчётов по этим данным. Для доступа к отчётам используется веб-интерфейс.
Пример реализации под катом.

Но, для начала, необходимо скопировать сами данные с сервера SQL Server Express Edition (база используется сервером MS TMG) в базу MySQL. Для этого каждую ночь выполнять bat-файл. Содержимое файла:

cscript "start.vbs" %1 

Содержимое файла start.vbs:

On Error Resume Next  const gsHelpFile = "c:\script\TMG\help.txt"      ' <-- В файле help.txt содержится справочная информация по работе скрипта. 'const gbDebugModeON = false dim gsRunCmd  gsNormalDate = fuNormalizeSystemDate(cStr(DateAdd("d", -1, Date))) 	' <-- Это для отчета за вчера (нормальный режим)  if Wscript.Arguments.Count >= 1 then 	if fuNeedHelp(lCase(Wscript.Arguments(0))) then 		fuTypeTextfile(gsHelpFile) 		WScript.Quit 0 	else  		gsNormalDate = Wscript.Arguments(0) 	end if end if  wscript.echo gsNormalDate  Set WshShell = CreateObject("WScript.Shell") gsRunCmd = "get-TMGReports.bat " & gsNormalDate wscript.echo gsRunCmd WshShell.Run gsRunCmd  ' Служебные функции function fuNormalizeSystemDate(lsDate) 	'wscript.echo "Function get: " & lsDate 	lsNormalizeDate = lsDate 	 	if InStr(lsDate, ".") then 		lArrDate = Split(lsDate, ".") 		lsNormalizeDate = lArrDate(2) & lArrDate(1) & lArrDate(0) 	elseif InStr(lsDate, "/") then 		lArrDate = Split(lsDate, "/") 		lsNormalizeDate = fuCheckDatePart(lArrDate(2)) & fuCheckDatePart(lArrDate(0)) & fuCheckDatePart(lArrDate(1)) 	elseif InStr(lsDate, "\") then 		lArrDate = Split(lsDate, "\") 		lsNormalizeDate = fuCheckDatePart(lArrDate(2)) & fuCheckDatePart(lArrDate(0)) & fuCheckDatePart(lArrDate(1)) 	end if 	 	fuNormalizeSystemDate = lsNormalizeDate end function   function fuNeedHelp(lsPar) 	lbFoo = false 	if  InStr(lsPar, "-h") or InStr(lsPar, "help") or InStr(lsPar, "/h") or InStr(lsPar, "?") then 		lbFoo = true 	end if 	fuNeedHelp = lbFoo end function   function fuTypeTextfile(lsTextfile) 	Set objFSO = CreateObject("Scripting.FileSystemObject") 	Set objTextFileShowHelp = objFSO.OpenTextFile(lsTextfile, 1) 	Do Until objTextFileShowHelp.AtEndOfStream 		wscript.echo objTextFileShowHelp.Readline 	Loop 	objTextFileShowHelp.Close end function   function fuCheckDatePart(lsDate) 	lsNormalizeDate = lsDate 	 	if len(lsDate) <= 1 then 		lsNormalizeDate = "0" & lsDate 	end if 	 	fuCheckDatePart = lsNormalizeDate end function  

Содержимое файла get-TMGReports.bat:

bcp.exe "SELECT DISTINCT UrlDestHost,ClientUserName,SUM(processingtime) as processingtime,SUM(bytesrecvd) as bytesrecvd,SUM(bytessent) as bytessent,ClientIP FROM [ISALOG_%1_WEB_000].[dbo].[WebProxyLog] where resultcode not in (12202,12302) GROUP BY ClientUserName,UrlDestHost,ClientIP" queryout "ISALOG_%1_WEB_000.xls" -c -T -S TMG-SERVER\MSFW copy ISALOG_%1_WEB_000.xls \\WEB-SERVER\c$\script\TMG\Export\2012\1\ISALOG_%1_WEB_000_01.xls  bcp.exe "SELECT DISTINCT UrlDestHost,ClientUserName,SUM(processingtime) as processingtime,SUM(bytesrecvd) as bytesrecvd,SUM(bytessent) as bytessent,ClientIP,convert(varchar, logTime, 108),uri FROM [ISALOG_%1_WEB_000].[dbo].[WebProxyLog] where resultcode not in (12202,12302) GROUP BY ClientUserName,UrlDestHost,ClientIP,convert(varchar, logTime, 108),uri" queryout "ISALOG_%1_WEB_000_FULL.xls" -c -T -S TMG-SERVER\MSFW move ISALOG_%1_WEB_000_FULL.xls \\WEB-SERVER\c$\script\TMG\Export\2012\2\ISALOG_%1_WEB_000_FULL_01.xls  bcp.exe "SELECT [servername],[ClientUserName],[logTime],[Action],[resultcode],[rule],[protocol],[SourceIP],[SourcePort],[DestinationIP],[DestinationPort],[OriginalClientIP],[SourceNetwork],[DestinationNetwork],[ApplicationProtocol],[bytessent],[bytessentDelta],[bytesrecvd],[bytesrecvdDelta],[connectiontime],[connectiontimeDelta],[DestinationName],[ClientAgent],[sessionid],[connectionid],[InternalServiceInfo] FROM [ISALOG_%1_FWS_000].[dbo].[FirewallLog] WHERE [ClientUserName] <> '-' AND [protocol] = 'TCP'" queryout "ISALOG_%1_FWS_000.xls" -c -T -S TMG-SERVER\MSFW copy ISALOG_%1_FWS_000.xls \\WEB-SERVER\c$\script\TMG\Export\2012\fws\ISALOG_%1_FWS_000_01.xls 

Скрипты для создания нужных таблиц в базе MySQL:

CREATE TABLE IF NOT EXISTS ISALOG_WEB_000 (   dt date NOT NULL,   UrlDestHost varchar(2048) NOT NULL,   ClientUserName varchar(1024) NOT NULL,   processingtime int(11) NOT NULL,   bytesrecvd int(11) NOT NULL,   bytessent int(11) NOT NULL,   ClientIP varchar(64) NOT NULL,   KEY ClientUserName (ClientUserName(1000)),   KEY UrlDestHost (UrlDestHost(1000)),   KEY dt (dt) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='Данные с 01.01.2013' /*!50100 PARTITION BY RANGE ( TO_DAYS(dt)) (PARTITION p2013_01 VALUES LESS THAN (735265) ENGINE = MyISAM,  PARTITION p2013_02 VALUES LESS THAN (735293) ENGINE = MyISAM,  PARTITION p2013_03 VALUES LESS THAN (735324) ENGINE = MyISAM,  PARTITION p2013_04 VALUES LESS THAN (735354) ENGINE = MyISAM,  PARTITION p2013_05 VALUES LESS THAN (735385) ENGINE = MyISAM,  PARTITION p2013_06 VALUES LESS THAN (735415) ENGINE = MyISAM,  PARTITION p2013_07 VALUES LESS THAN (735446) ENGINE = MyISAM,  PARTITION p2013_08 VALUES LESS THAN (735477) ENGINE = MyISAM,  PARTITION p2013_09 VALUES LESS THAN (735507) ENGINE = MyISAM,  PARTITION p2013_10 VALUES LESS THAN (735538) ENGINE = MyISAM,  PARTITION p2013_11 VALUES LESS THAN (735568) ENGINE = MyISAM,  PARTITION p2013_12 VALUES LESS THAN (735599) ENGINE = MyISAM,  PARTITION p2014_01 VALUES LESS THAN (735630) ENGINE = MyISAM,  PARTITION p2014_02 VALUES LESS THAN (735658) ENGINE = MyISAM,  PARTITION p2014_03 VALUES LESS THAN (735689) ENGINE = MyISAM,  PARTITION p2014_04 VALUES LESS THAN (735719) ENGINE = MyISAM,  PARTITION p2014_05 VALUES LESS THAN (735750) ENGINE = MyISAM,  PARTITION p2014_06 VALUES LESS THAN (735780) ENGINE = MyISAM,  PARTITION p2014_07 VALUES LESS THAN (735811) ENGINE = MyISAM,  PARTITION p2014_08 VALUES LESS THAN (735842) ENGINE = MyISAM,  PARTITION p2014_09 VALUES LESS THAN (735872) ENGINE = MyISAM,  PARTITION p2014_10 VALUES LESS THAN (735903) ENGINE = MyISAM,  PARTITION p2014_11 VALUES LESS THAN (735933) ENGINE = MyISAM,  PARTITION p2014_12 VALUES LESS THAN (735964) ENGINE = MyISAM,  PARTITION p2015_01 VALUES LESS THAN (735995) ENGINE = MyISAM,  PARTITION p2015_02 VALUES LESS THAN (736023) ENGINE = MyISAM,  PARTITION p2015_03 VALUES LESS THAN (736054) ENGINE = MyISAM,  PARTITION p2015_04 VALUES LESS THAN (736084) ENGINE = MyISAM,  PARTITION p2015_05 VALUES LESS THAN (736115) ENGINE = MyISAM,  PARTITION p2015_06 VALUES LESS THAN (736145) ENGINE = MyISAM,  PARTITION p2015_07 VALUES LESS THAN (736176) ENGINE = MyISAM,  PARTITION p2015_08 VALUES LESS THAN (736207) ENGINE = MyISAM,  PARTITION p2015_09 VALUES LESS THAN (736237) ENGINE = MyISAM,  PARTITION p2015_10 VALUES LESS THAN (736268) ENGINE = MyISAM,  PARTITION p2015_11 VALUES LESS THAN (736298) ENGINE = MyISAM,  PARTITION p2015_12 VALUES LESS THAN (736329) ENGINE = MyISAM,  PARTITION p2016_01 VALUES LESS THAN (736360) ENGINE = MyISAM,  PARTITION p2016_02 VALUES LESS THAN (736389) ENGINE = MyISAM,  PARTITION p2016_03 VALUES LESS THAN (736420) ENGINE = MyISAM,  PARTITION p2016_04 VALUES LESS THAN (736450) ENGINE = MyISAM,  PARTITION p2016_05 VALUES LESS THAN (736481) ENGINE = MyISAM,  PARTITION p2016_06 VALUES LESS THAN (736511) ENGINE = MyISAM,  PARTITION p2016_07 VALUES LESS THAN (736542) ENGINE = MyISAM,  PARTITION p2016_08 VALUES LESS THAN (736573) ENGINE = MyISAM,  PARTITION p2016_09 VALUES LESS THAN (736603) ENGINE = MyISAM,  PARTITION p2016_10 VALUES LESS THAN (736634) ENGINE = MyISAM,  PARTITION p2016_11 VALUES LESS THAN (736664) ENGINE = MyISAM,  PARTITION p2016_12 VALUES LESS THAN (736695) ENGINE = MyISAM,  PARTITION p2017 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */;  CREATE TABLE IF NOT EXISTS ISALOG_WEB_000_FULL (   dt date NOT NULL,   UrlDestHost varchar(2048) NOT NULL,   ClientUserName varchar(1024) NOT NULL,   processingtime int(11) NOT NULL,   bytesrecvd int(11) NOT NULL,   bytessent int(11) NOT NULL,   ClientIP varchar(64) NOT NULL,   tm time NOT NULL,   uri varchar(2048) NOT NULL,   KEY ClientUserName (ClientUserName(1000)),   KEY UrlDestHost (UrlDestHost(1000)),   KEY dt (dt) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='Данные с 19.07.2013' /*!50100 PARTITION BY RANGE ( TO_DAYS(dt)) (PARTITION p2013_01 VALUES LESS THAN (735265) ENGINE = MyISAM,  PARTITION p2013_02 VALUES LESS THAN (735293) ENGINE = MyISAM,  PARTITION p2013_03 VALUES LESS THAN (735324) ENGINE = MyISAM,  PARTITION p2013_04 VALUES LESS THAN (735354) ENGINE = MyISAM,  PARTITION p2013_05 VALUES LESS THAN (735385) ENGINE = MyISAM,  PARTITION p2013_06 VALUES LESS THAN (735415) ENGINE = MyISAM,  PARTITION p2013_07 VALUES LESS THAN (735446) ENGINE = MyISAM,  PARTITION p2013_08 VALUES LESS THAN (735477) ENGINE = MyISAM,  PARTITION p2013_09 VALUES LESS THAN (735507) ENGINE = MyISAM,  PARTITION p2013_10 VALUES LESS THAN (735538) ENGINE = MyISAM,  PARTITION p2013_11 VALUES LESS THAN (735568) ENGINE = MyISAM,  PARTITION p2013_12 VALUES LESS THAN (735599) ENGINE = MyISAM,  PARTITION p2014_01 VALUES LESS THAN (735630) ENGINE = MyISAM,  PARTITION p2014_02 VALUES LESS THAN (735658) ENGINE = MyISAM,  PARTITION p2014_03 VALUES LESS THAN (735689) ENGINE = MyISAM,  PARTITION p2014_04 VALUES LESS THAN (735719) ENGINE = MyISAM,  PARTITION p2014_05 VALUES LESS THAN (735750) ENGINE = MyISAM,  PARTITION p2014_06 VALUES LESS THAN (735780) ENGINE = MyISAM,  PARTITION p2014_07 VALUES LESS THAN (735811) ENGINE = MyISAM,  PARTITION p2014_08 VALUES LESS THAN (735842) ENGINE = MyISAM,  PARTITION p2014_09 VALUES LESS THAN (735872) ENGINE = MyISAM,  PARTITION p2014_10 VALUES LESS THAN (735903) ENGINE = MyISAM,  PARTITION p2014_11 VALUES LESS THAN (735933) ENGINE = MyISAM,  PARTITION p2014_12 VALUES LESS THAN (735964) ENGINE = MyISAM,  PARTITION p2015_01 VALUES LESS THAN (735995) ENGINE = MyISAM,  PARTITION p2015_02 VALUES LESS THAN (736023) ENGINE = MyISAM,  PARTITION p2015_03 VALUES LESS THAN (736054) ENGINE = MyISAM,  PARTITION p2015_04 VALUES LESS THAN (736084) ENGINE = MyISAM,  PARTITION p2015_05 VALUES LESS THAN (736115) ENGINE = MyISAM,  PARTITION p2015_06 VALUES LESS THAN (736145) ENGINE = MyISAM,  PARTITION p2015_07 VALUES LESS THAN (736176) ENGINE = MyISAM,  PARTITION p2015_08 VALUES LESS THAN (736207) ENGINE = MyISAM,  PARTITION p2015_09 VALUES LESS THAN (736237) ENGINE = MyISAM,  PARTITION p2015_10 VALUES LESS THAN (736268) ENGINE = MyISAM,  PARTITION p2015_11 VALUES LESS THAN (736298) ENGINE = MyISAM,  PARTITION p2015_12 VALUES LESS THAN (736329) ENGINE = MyISAM,  PARTITION p2016_01 VALUES LESS THAN (736360) ENGINE = MyISAM,  PARTITION p2016_02 VALUES LESS THAN (736389) ENGINE = MyISAM,  PARTITION p2016_03 VALUES LESS THAN (736420) ENGINE = MyISAM,  PARTITION p2016_04 VALUES LESS THAN (736450) ENGINE = MyISAM,  PARTITION p2016_05 VALUES LESS THAN (736481) ENGINE = MyISAM,  PARTITION p2016_06 VALUES LESS THAN (736511) ENGINE = MyISAM,  PARTITION p2016_07 VALUES LESS THAN (736542) ENGINE = MyISAM,  PARTITION p2016_08 VALUES LESS THAN (736573) ENGINE = MyISAM,  PARTITION p2016_09 VALUES LESS THAN (736603) ENGINE = MyISAM,  PARTITION p2016_10 VALUES LESS THAN (736634) ENGINE = MyISAM,  PARTITION p2016_11 VALUES LESS THAN (736664) ENGINE = MyISAM,  PARTITION p2016_12 VALUES LESS THAN (736695) ENGINE = MyISAM,  PARTITION p2017 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */;  CREATE TABLE IF NOT EXISTS ISALOG_FWS_000 (   dt date NOT NULL,   tm time DEFAULT NULL,   servername varchar(128) DEFAULT NULL,   ClientUserName varchar(514) DEFAULT NULL,   `Action` int(3) DEFAULT NULL,   resultcode int(11) DEFAULT NULL,   rule varchar(128) DEFAULT NULL,   protocol varchar(32) DEFAULT NULL,   SourceIP varchar(64) DEFAULT NULL,   SourcePort varchar(6) DEFAULT NULL,   DestinationIP varchar(64) DEFAULT NULL,   DestinationPort varchar(6) DEFAULT NULL,   OriginalClientIP varchar(64) DEFAULT NULL,   SourceNetwork varchar(128) DEFAULT NULL,   DestinationNetwork varchar(128) DEFAULT NULL,   ApplicationProtocol varchar(128) DEFAULT NULL,   bytessent int(11) DEFAULT NULL,   bytessentDelta int(11) DEFAULT NULL,   bytesrecvd int(11) DEFAULT NULL,   bytesrecvdDelta int(11) DEFAULT NULL,   connectiontime int(11) DEFAULT NULL,   connectiontimeDelta int(11) DEFAULT NULL,   DestinationName varchar(255) DEFAULT NULL,   ClientAgent varchar(255) DEFAULT NULL,   sessionid int(11) DEFAULT NULL,   connectionid int(11) DEFAULT NULL,   InternalServiceInfo int(6) DEFAULT NULL,   KEY ClientUserName (ClientUserName),   KEY dt (dt) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 /*!50100 PARTITION BY RANGE ( TO_DAYS(dt)) (PARTITION p2013_01 VALUES LESS THAN (735265) ENGINE = MyISAM,  PARTITION p2013_02 VALUES LESS THAN (735293) ENGINE = MyISAM,  PARTITION p2013_03 VALUES LESS THAN (735324) ENGINE = MyISAM,  PARTITION p2013_04 VALUES LESS THAN (735354) ENGINE = MyISAM,  PARTITION p2013_05 VALUES LESS THAN (735385) ENGINE = MyISAM,  PARTITION p2013_06 VALUES LESS THAN (735415) ENGINE = MyISAM,  PARTITION p2013_07 VALUES LESS THAN (735446) ENGINE = MyISAM,  PARTITION p2013_08 VALUES LESS THAN (735477) ENGINE = MyISAM,  PARTITION p2013_09 VALUES LESS THAN (735507) ENGINE = MyISAM,  PARTITION p2013_10 VALUES LESS THAN (735538) ENGINE = MyISAM,  PARTITION p2013_11 VALUES LESS THAN (735568) ENGINE = MyISAM,  PARTITION p2013_12 VALUES LESS THAN (735599) ENGINE = MyISAM,  PARTITION p2014_01 VALUES LESS THAN (735630) ENGINE = MyISAM,  PARTITION p2014_02 VALUES LESS THAN (735658) ENGINE = MyISAM,  PARTITION p2014_03 VALUES LESS THAN (735689) ENGINE = MyISAM,  PARTITION p2014_04 VALUES LESS THAN (735719) ENGINE = MyISAM,  PARTITION p2014_05 VALUES LESS THAN (735750) ENGINE = MyISAM,  PARTITION p2014_06 VALUES LESS THAN (735780) ENGINE = MyISAM,  PARTITION p2014_07 VALUES LESS THAN (735811) ENGINE = MyISAM,  PARTITION p2014_08 VALUES LESS THAN (735842) ENGINE = MyISAM,  PARTITION p2014_09 VALUES LESS THAN (735872) ENGINE = MyISAM,  PARTITION p2014_10 VALUES LESS THAN (735903) ENGINE = MyISAM,  PARTITION p2014_11 VALUES LESS THAN (735933) ENGINE = MyISAM,  PARTITION p2014_12 VALUES LESS THAN (735964) ENGINE = MyISAM,  PARTITION p2015_01 VALUES LESS THAN (735995) ENGINE = MyISAM,  PARTITION p2015_02 VALUES LESS THAN (736023) ENGINE = MyISAM,  PARTITION p2015_03 VALUES LESS THAN (736054) ENGINE = MyISAM,  PARTITION p2015_04 VALUES LESS THAN (736084) ENGINE = MyISAM,  PARTITION p2015_05 VALUES LESS THAN (736115) ENGINE = MyISAM,  PARTITION p2015_06 VALUES LESS THAN (736145) ENGINE = MyISAM,  PARTITION p2015_07 VALUES LESS THAN (736176) ENGINE = MyISAM,  PARTITION p2015_08 VALUES LESS THAN (736207) ENGINE = MyISAM,  PARTITION p2015_09 VALUES LESS THAN (736237) ENGINE = MyISAM,  PARTITION p2015_10 VALUES LESS THAN (736268) ENGINE = MyISAM,  PARTITION p2015_11 VALUES LESS THAN (736298) ENGINE = MyISAM,  PARTITION p2015_12 VALUES LESS THAN (736329) ENGINE = MyISAM,  PARTITION p2016_01 VALUES LESS THAN (736360) ENGINE = MyISAM,  PARTITION p2016_02 VALUES LESS THAN (736389) ENGINE = MyISAM,  PARTITION p2016_03 VALUES LESS THAN (736420) ENGINE = MyISAM,  PARTITION p2016_04 VALUES LESS THAN (736450) ENGINE = MyISAM,  PARTITION p2016_05 VALUES LESS THAN (736481) ENGINE = MyISAM,  PARTITION p2016_06 VALUES LESS THAN (736511) ENGINE = MyISAM,  PARTITION p2016_07 VALUES LESS THAN (736542) ENGINE = MyISAM,  PARTITION p2016_08 VALUES LESS THAN (736573) ENGINE = MyISAM,  PARTITION p2016_09 VALUES LESS THAN (736603) ENGINE = MyISAM,  PARTITION p2016_10 VALUES LESS THAN (736634) ENGINE = MyISAM,  PARTITION p2016_11 VALUES LESS THAN (736664) ENGINE = MyISAM,  PARTITION p2016_12 VALUES LESS THAN (736695) ENGINE = MyISAM,  PARTITION p2017 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */; 

Я сделал таблицы секционированными по месяцам. Сделаны индексы по пользователю и дате.

На веб-сервере нужно установить logparser.
Скрипт на веб-сервере копирует данные в базу MySQL.
Содержимое bat-файла:

logparser "select * into c:\script\TMG\Export\2012\1\2012.xls from c:\script\TMG\Export\2012\1\ISALOG_201*.xls" -i:csv -headerRow:OFF -o:tsv -oSeparator:tab cscript //nologo "c:\script\TMG\Scripts\make-reportFile.vbs" c:\script\TMG\Export\2012\1\2012.xls c:\script\TMG\Export\2012\1\ISALOG_WEB_000.csv  logparser "select * into c:\script\TMG\Export\2012\2\2012.xls from c:\script\TMG\Export\2012\2\ISALOG_201*.xls" -i:csv -headerRow:OFF -o:tsv -oSeparator:tab cscript //nologo "c:\script\TMG\Scripts\make-reportFile-full.vbs" c:\script\TMG\Export\2012\2\2012.xls c:\script\TMG\Export\2012\2\ISALOG_WEB_000_FULL.csv  logparser "select * into c:\script\TMG\Export\2012\fws\2012.xls from c:\script\TMG\Export\2012\fws\ISALOG_201*.xls" -i:csv -headerRow:OFF -o:tsv -oSeparator:tab cscript //nologo "c:\script\TMG\Scripts\make-reportFile-fws.vbs" c:\script\TMG\Export\2012\fws\2012.xls c:\script\TMG\Export\2012\fws\ISALOG_FWS_000.csv  del c:\script\TMG\Export\2012\1\2012.xls del c:\script\TMG\Export\2012\2\2012.xls del c:\script\TMG\Export\2012\fws\2012.xls  cd\ subst Z: e:\WebServers Z: cd\ cd usr\local\mysql-5.1\bin\ mysqlimport.exe -u username -p12345678 --fields-terminated-by=\t --fields-enclosed-by="" --fields-escaped-by=\ --lines-terminated-by=\n --local my_base c:\script\TMG\Export\2012\1\ISALOG_WEB_000.csv mysqlimport.exe -u username -p12345678 --fields-terminated-by=\t --fields-enclosed-by="" --fields-escaped-by=\ --lines-terminated-by=\n --local my_base c:\script\TMG\Export\2012\2\ISALOG_WEB_000_FULL.csv mysqlimport.exe -u username -p12345678 --fields-terminated-by=\t --fields-enclosed-by="" --fields-escaped-by=\ --lines-terminated-by=\n --local my_base c:\script\TMG\Export\2012\fws\ISALOG_FWS_000.csv  move c:\script\TMG\Export\2012\1\ISALOG_201*.xls e:\Export\2013 move c:\script\TMG\Export\2012\2\ISALOG_201*.xls e:\Export\2013 move c:\script\TMG\Export\2012\fws\ISALOG_201*.xls e:\Export\2013  del c:\script\TMG\Export\2012\1\ISALOG_WEB_000.csv del c:\script\TMG\Export\2012\2\ISALOG_WEB_000_FULL.csv del c:\script\TMG\Export\2012\fws\ISALOG_FWS_000.csv 

Содержимое вспомогательных файлов.
make-reportFile.vbs:

dim gsDevider dim record dim recordResult  if Wscript.Arguments.Count = 2 then 	sgFilename = Wscript.Arguments(0) 	sgFilenameResult = Wscript.Arguments(1) elseif Wscript.Arguments.Count = 1 then 	sgFilename = Wscript.Arguments(0) 	sgFilenameResult = "c:\script\TMG\Export\2012\1\ISALOG_WEB_000.csv" else 	sgFilename = InputBox("Имя исходного файла", "Введите", "") 	sgFilenameResult = InputBox("Имя результирующего файла", "Введите", "") end if  gsDevider = VBTab record = "" recordResult = ""  Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFileOpen = objFSO.OpenTextFile(sgFilename, 1) Set objTextFileWrite = objFSO.CreateTextFile(sgFilenameResult, True)  Do Until objTextFileOpen.AtEndOfStream 	record = trim(objTextFileOpen.Readline)  	if InStr(record, "Filename	RowNumber	Field1") = 0 then 		if inStr(record, gsDevider) then 			lArr = split(record, gsDevider) 			recordResult = 	fuNormalyzeDate(lArr(0)) & gsDevider & _ 							lArr(2) & gsDevider & _ 							fuNormalyzeAccount(lArr(3)) & gsDevider & _ 							lArr(4) & gsDevider & _ 							lArr(5) & gsDevider & _ 							lArr(6) & gsDevider & _ 							lArr(7) 		end if 		objTextFileWrite.WriteLine recordResult 	end if Loop  objTextFileWrite.Close objTextFileOpen.Close  WScript.Echo "* Операция успешно завершена."   function fuRemoveExtention(lsFilename) 	lRes = lsFilename 	if InStr(lsFilename, ".") then 		lRes = Left(lsFilename, Len(lsFilename)-4) 	end if 	fuRemoveExtention = lRes end function   function fuNormalyzeDate(lsDate) 	lRes = lsDate 	if InStr(lsDate, "\") then 		lArrDate = Split(lsDate, "\") 		lRes = lArrDate(uBound(lArrDate)) 		 		lArrDate = Split(lRes, "_") 		lRes = lArrDate(1) 		 		lRes = Left(lRes, 4) & "-" & Mid(lRes, 5, 2) & "-" & Right(lRes, 2) 	end if 	fuNormalyzeDate = lRes end function   function fuNormalyzeAccount(lsAccount) 	lRes = lsAccount 	lRes = Replace(lRes, "DOMAIN\", "") 	fuNormalyzeAccount = lRes end function  

make-reportFile-full.vbs

dim gsDevider dim record dim recordResult  if Wscript.Arguments.Count = 2 then 	sgFilename = Wscript.Arguments(0) 	sgFilenameResult = Wscript.Arguments(1) elseif Wscript.Arguments.Count = 1 then 	sgFilename = Wscript.Arguments(0) 	sgFilenameResult = "c:\script\TMG\Export\2012\1\ISALOG_WEB_000.csv" else 	sgFilename = InputBox("Имя исходного файла", "Введите", "") 	sgFilenameResult = InputBox("Имя результирующего файла", "Введите", "") end if  gsDevider = VBTab record = "" recordResult = ""  Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFileOpen = objFSO.OpenTextFile(sgFilename, 1) Set objTextFileWrite = objFSO.CreateTextFile(sgFilenameResult, True)  Do Until objTextFileOpen.AtEndOfStream 	record = trim(objTextFileOpen.Readline)  	if InStr(record, "Filename	RowNumber	Field1") = 0 then 		if inStr(record, gsDevider) then 			lArr = split(record, gsDevider) 			recordResult = 	fuNormalyzeDate(lArr(0)) & gsDevider & _ 							lArr(2) & gsDevider & _ 							fuNormalyzeAccount(lArr(3)) & gsDevider & _ 							lArr(4) & gsDevider & _ 							lArr(5) & gsDevider & _ 							lArr(6) & gsDevider & _ 							lArr(7) & gsDevider & _ 							lArr(8) & gsDevider & _ 							lArr(9) 		end if 		objTextFileWrite.WriteLine recordResult 	end if Loop  objTextFileWrite.Close objTextFileOpen.Close  WScript.Echo "* Операция успешно завершена."   function fuRemoveExtention(lsFilename) 	lRes = lsFilename 	if InStr(lsFilename, ".") then 		lRes = Left(lsFilename, Len(lsFilename)-4) 	end if 	fuRemoveExtention = lRes end function   function fuNormalyzeDate(lsDate) 	lRes = lsDate 	if InStr(lsDate, "\") then 		lArrDate = Split(lsDate, "\") 		lRes = lArrDate(uBound(lArrDate)) 		 		lArrDate = Split(lRes, "_") 		lRes = lArrDate(1) 		 		lRes = Left(lRes, 4) & "-" & Mid(lRes, 5, 2) & "-" & Right(lRes, 2) 	end if 	fuNormalyzeDate = lRes end function   function fuNormalyzeAccount(lsAccount) 	lRes = lsAccount 	lRes = Replace(lRes, "DOMAIN\", "") 	fuNormalyzeAccount = lRes end function  

make-reportFile-fws.vbs

dim gsDevider dim record dim recordResult  if Wscript.Arguments.Count = 2 then 	sgFilename = Wscript.Arguments(0) 	sgFilenameResult = Wscript.Arguments(1) elseif Wscript.Arguments.Count = 1 then 	sgFilename = Wscript.Arguments(0) 	sgFilenameResult = "c:\script\TMG\Export\2012\fws\ISALOG_FWS_000.csv" else 	sgFilename = InputBox("Имя исходного файла", "Введите", "") 	sgFilenameResult = InputBox("Имя результирующего файла", "Введите", "") end if  gsDevider = VBTab record = "" recordResult = ""  Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFileOpen = objFSO.OpenTextFile(sgFilename, 1) Set objTextFileWrite = objFSO.CreateTextFile(sgFilenameResult, True)  Do Until objTextFileOpen.AtEndOfStream 	record = trim(objTextFileOpen.Readline)  	if InStr(record, "Filename	RowNumber	Field1") = 0 then 		if inStr(record, gsDevider) then 			lArr = split(record, gsDevider) 			recordResult = 	fuNormalyzeDateTime(lArr(4),0) & gsDevider & _ 							fuNormalyzeDateTime(lArr(4),1)  & gsDevider & _ 							lArr(2)  & gsDevider & _ 							fuNormalyzeAccount(lArr(3)) & gsDevider & _ 							lArr(5)  & gsDevider & _ 							lArr(6)  & gsDevider & _ 							lArr(7)  & gsDevider & _ 							lArr(8)  & gsDevider & _ 							lArr(9)  & gsDevider & _ 							lArr(10) & gsDevider & _ 							lArr(11) & gsDevider & _ 							lArr(12) & gsDevider & _ 							lArr(13) & gsDevider & _ 							lArr(14) & gsDevider & _ 							lArr(15) & gsDevider & _ 							lArr(16) & gsDevider & _ 							lArr(17) & gsDevider & _ 							lArr(18) & gsDevider & _ 							lArr(19) & gsDevider & _ 							lArr(20) & gsDevider & _ 							lArr(21) & gsDevider & _ 							lArr(22) & gsDevider & _ 							lArr(23) & gsDevider & _ 							lArr(24) & gsDevider & _ 							lArr(25) & gsDevider & _ 							lArr(26) & gsDevider & _ 							lArr(27) 		end if 		objTextFileWrite.WriteLine recordResult 	end if Loop  objTextFileWrite.Close objTextFileOpen.Close  WScript.Echo "* Операция успешно завершена."   function fuRemoveExtention(lsFilename) 	lRes = lsFilename 	if InStr(lsFilename, ".") then 		lRes = Left(lsFilename, Len(lsFilename)-4) 	end if 	fuRemoveExtention = lRes end function   function fuNormalyzeDate(lsDate) 	lRes = lsDate 	if InStr(lsDate, "\") then 		lArrDate = Split(lsDate, "\") 		lRes = lArrDate(uBound(lArrDate)) 		 		lArrDate = Split(lRes, "_") 		lRes = lArrDate(1) 		 		lRes = Left(lRes, 4) & "-" & Mid(lRes, 5, 2) & "-" & Right(lRes, 2) 	end if 	fuNormalyzeDate = lRes end function   function fuNormalyzeDateTime(lsDateTime, liFlag) 	lRes = lsDateTime 	if InStr(lsDateTime, " ") then 		lArrDate = Split(lsDateTime, " ") 		lRes = lArrDate(liFlag) 		if liFlag = 1 then 			lArrTime = Split(lRes, ".") 			lRes = lArrTime(0) 		end if 	end if 	fuNormalyzeDateTime = lRes end function   function fuNormalyzeAccount(lsAccount) 	lRes = lsAccount 	lRes = Replace(lRes, "DOMAIN\", "") 	fuNormalyzeAccount = lRes end function  

Данные загружены в базу MySQL. Можно делать самые разные отчеты и веб-интерфейс к ним.
Я прикрутил авторизацию по учётной записи и паролю (опубликованную, кстати, на Хабре) и 14 отчётов.
Вот так у меня выглядит главный экран создания отчётов:

Примеры отчётов.

ссылка на оригинал статьи http://habrahabr.ru/post/202792/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *