code_junkie

Exporting SharePoint usage log files into a database using LogParser

Nov 11th, 2011
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.05 KB | None | 0 0
  1. LogParser "SELECT * INTO <TABLENAME> FROM <LogFileName>" -o:SQL -server:<servername> -database:<databasename> -driver:"SQL Server" -username:sa -password:xxxxx -createTable:ON
  2.  
  3. [Guid("1CC338B9-4F5F-4bf2-86AE-55C865CF7159")]
  4. public class SPUsageLogParserPlugin : ILogParserInputContext
  5. {
  6. private FileStream stream = null;
  7. private BinaryReader br = null;
  8. private object[] currentEntry = null;
  9.  
  10. public SPUsageLogParserPlugin() { }
  11.  
  12. #region LogParser
  13.  
  14. protected const int GENERAL_HEADER_LENGTH = 300;
  15. protected const int ENTRY_HEADER_LENGTH = 50;
  16. protected string[] columns = {"TimeStamp",
  17. "SiteGUID",
  18. "SiteUrl",
  19. "WebUrl",
  20. "Document",
  21. "User",
  22. "QueryString",
  23. "Referral",
  24. "UserAgent",
  25. "Command"};
  26.  
  27. protected string ReadString(BinaryReader br)
  28. {
  29. StringBuilder buffer = new StringBuilder();
  30. char c = br.ReadChar();
  31. while (c != 0) {
  32. buffer.Append(c);
  33. c = br.ReadChar();
  34. }
  35. return buffer.ToString();
  36. }
  37.  
  38. #endregion
  39.  
  40. #region ILogParserInputContext Members
  41.  
  42. enum FieldType
  43. {
  44. Integer = 1,
  45. Real = 2,
  46. String = 3,
  47. Timestamp = 4
  48. }
  49.  
  50. public void OpenInput(string from)
  51. {
  52. stream = File.OpenRead(from);
  53. br = new BinaryReader(stream);
  54. br.ReadBytes(GENERAL_HEADER_LENGTH);
  55. }
  56.  
  57. public int GetFieldCount()
  58. {
  59. return columns.Length;
  60. }
  61.  
  62. public string GetFieldName(int index)
  63. {
  64. return columns[index];
  65. }
  66.  
  67. public int GetFieldType(int index)
  68. {
  69. if (index == 0) {
  70. // TimeStamp
  71. return (int)FieldType.Timestamp;
  72. } else {
  73. // Other fields
  74. return (int)FieldType.String;
  75. }
  76. }
  77.  
  78. public bool ReadRecord()
  79. {
  80. if (stream.Position < stream.Length) {
  81. br.ReadBytes(ENTRY_HEADER_LENGTH); // Entry Header
  82.  
  83. string webappguid = ReadString(br);
  84.  
  85. DateTime timestamp = DateTime.ParseExact(ReadString(br), "HH:mm:ss", null);
  86. string siteUrl = ReadString(br);
  87. string webUrl = ReadString(br);
  88. string document = ReadString(br);
  89. string user = ReadString(br);
  90. string query = ReadString(br);
  91. string referral = ReadString(br);
  92. string userAgent = ReadString(br);
  93. string guid = ReadString(br);
  94. string command = ReadString(br);
  95.  
  96. currentEntry = new object[] { timestamp, webappguid, siteUrl, webUrl, document, user, query, referral, userAgent, command };
  97. return true;
  98. } else {
  99. currentEntry = new object[] { };
  100. return false;
  101. }
  102. }
  103.  
  104. public object GetValue(int index)
  105. {
  106. return currentEntry[index];
  107. }
  108.  
  109. public void CloseInput(bool abort)
  110. {
  111. br.Close();
  112. stream.Dispose();
  113. stream = null;
  114. br = null;
  115. }
  116.  
  117. #endregion
  118. }
  119.  
  120. CREATE TABLE [dbo].[STSlog](
  121. [application] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
  122. [date] [datetime] NULL,
  123. [time] [datetime] NULL,
  124. [username] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
  125. [computername] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
  126. [method] [varchar](16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
  127. [siteURL] [varchar](2048) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
  128. [webURL] [varchar](2048) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
  129. [docName] [varchar](2048) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
  130. [bytes] [int] NULL,
  131. [queryString] [varchar](2048) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
  132. [userAgent] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
  133. [referer] [varchar](2048) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
  134. [bitFlags] [smallint] NULL,
  135. [status] [smallint] NULL,
  136. [siteGuid] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
  137. ) ON [PRIMARY]
  138.  
  139. "C:projectsSTSLogParserSTSLogParser.exe" 2005-01-01 "c:projectsSTSlog2005-01-010.log" c:projectslogparsertmpstslog.csv
  140. "C:Program FilesLog Parser 2.2logparser.exe" "SELECT 'SharePointPortal' as application, TO_DATE(TO_UTCTIME(TO_TIMESTAMP(TO_TIMESTAMP(date, 'yyyy-MM-dd'), TO_TIMESTAMP(time, 'hh:mm:ss')))) AS date, TO_TIME( TO_UTCTIME( TO_TIMESTAMP(TO_TIMESTAMP(date, 'yyyy-MM-dd'), TO_TIMESTAMP(time, 'hh:mm:ss')))), UserName as username, 'SERVERNAME' as computername, 'GET' as method, SiteURL as siteURL, WebURL as webURL, DocName as docName, cBytes as bytes, QueryString as queryString, UserAgent as userAgent, RefURL as referer, TO_INT(bitFlags) as bitFlags, TO_INT(HttpStatus) as status, TO_STRING(SiteGuid) as siteGuid INTO STSlog FROM c:projectslogparsertmpstslog.csv WHERE (username IS NOT NULL) AND (TO_LOWERCASE(username) NOT IN (domainserviceaccount))" -i:CSV -headerRow:ON -o:SQL -server:localhost -database:SharePoint_SA_IN -clearTable:ON
Add Comment
Please, Sign In to add comment