kannel-log-summary
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:3k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. #!/usr/bin/awk -f
  2. #
  3. # Summarize Kannel log files.
  4. #
  5. # - total number of lines
  6. # - start and end times
  7. # - smsbox/wapbox requests: total, within the last hour (total and avg/s)
  8. # - number of restarts
  9. #
  10. # Lars Wirzenius
  11. #
  12. BEGIN {
  13. days_in_month[1] = 31
  14. days_in_month[2] = 28
  15. days_in_month[3] = 31
  16. days_in_month[4] = 30
  17. days_in_month[5] = 31
  18. days_in_month[6] = 30
  19. days_in_month[7] = 31
  20. days_in_month[8] = 31
  21. days_in_month[9] = 30
  22. days_in_month[10] = 31
  23. days_in_month[11] = 30
  24. days_in_month[12] = 31
  25. "date -u '+%Y-%m-%d %H:%M:%S'" | getline nowstr
  26. now = secs(nowstr)
  27. new_request_age = 3600 * 4
  28. new_restart_age = 3600 * 24
  29. }
  30. FILENAME != prev_filename {
  31. if (prev_filename) {
  32. lines = NR - prev_nr
  33. report(prev_filename, lines, starts, ends, requests, 
  34. new_requests, restarts, new_restarts)
  35. }
  36. prev_filename = FILENAME
  37. prev_nr = NR
  38. starts = substr($0, 0, 20)
  39. requests = 0
  40. new_requests = 0
  41. restarts = 0
  42. new_restarts = 0
  43. }
  44. /INFO: Added logfile `.*' with level/ {
  45. ++restarts
  46. if (now - secs($0) <= new_restart_age)
  47. ++new_restarts
  48. }
  49. /INFO: Starting to service <.*> from <.*> to <.*>$/ ||
  50. /INFO: WSP: Fetched <.*>$/ {
  51. ++requests
  52. if (now - secs($0) <= new_request_age)
  53. ++new_requests
  54. }
  55. /^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]/ {
  56. ends = substr($0, 0, 20)
  57. }
  58. END {
  59. if (prev_filename)
  60. report(prev_filename, NR - prev_nr, starts, ends, requests,
  61. new_requests, restarts, new_restarts)
  62. }
  63. function report(filename, lines, starts, ends, requests, new_requests, 
  64. restarts, new_restarts) {
  65. duration = secs(ends) - secs(starts)
  66. avgperday = requests / (duration / 86400)
  67. persec = new_requests / new_request_age
  68. print "File:", filename
  69. print "Lines:", lines
  70. print "Starts:", starts
  71. print "Ends:", ends
  72. print "Duration:", secs2str(duration)
  73. print "Restarts:", restarts
  74. print "Recent restarts:", new_restarts, "(in the last", 
  75. new_restart_age/3600, "hours)"
  76. if (requests > 0) {
  77. print "Requests:", requests, "total", 
  78. avgperday, "average per day"
  79. print "Recent requests (last", new_request_age/3600, 
  80. "hours):", new_requests
  81. print "Recent average per second:", persec
  82. }
  83. print ""
  84. }
  85. function secs2str(s) {
  86. days = idiv(s, 86400)
  87. s -= days * 86400
  88. hours = idiv(s, 3600)
  89. s -= hours * 3600
  90. mins = idiv(s, 60)
  91. s -= mins * 60
  92. return days "d " hours "h " mins "m " s "s"
  93. }
  94. function secs(timestamp) {
  95. year = substr(timestamp, 1, 4)
  96. mon = substr(timestamp, 6, 2)
  97. day = substr(timestamp, 9, 2)
  98. hour = substr(timestamp, 12, 2)
  99. min = substr(timestamp, 15, 2)
  100. sec = substr(timestamp, 18, 2)
  101. return sec + min*60 + hour*3600 + (day-1)*86400 + 
  102.        mon2secs(mon, year) + year2secs(year)
  103. }
  104. function mon2secs(mon, year) {
  105. days = 0
  106. mon = mon + 0 # make sure it is a number
  107. for (m = 1; m < mon; ++m)
  108. days += days_in_month[mon]
  109. if (mon > 2 && isleap(year))
  110. ++days
  111. return days * 86400
  112. }
  113. function year2secs(year) {
  114. s = 0
  115. for (y = 1970; y < year; ++y) {
  116. if (isleap(year))
  117. s += 366 * 86400
  118. else
  119. s += 365 * 86400
  120. }
  121. return s
  122. }
  123. function isleap(year) {
  124. return (year % 4) == 0 &&
  125. ((year % 100) != 0 || (year % 400) == 0)
  126. }
  127. function idiv(a, b) {
  128. # assume a >= 0, b > 0
  129. for (i = 0; a > b; ++i)
  130. a -= b;
  131. return i
  132. }