summaryrefslogtreecommitdiff
path: root/bin/weblogs-merge
diff options
context:
space:
mode:
authorPeter Palfrader <peter@palfrader.org>2006-10-18 13:11:27 +0000
committerweasel <weasel@bc3d92e2-beff-0310-a7cd-cc87d7ac0ede>2006-10-18 13:11:27 +0000
commit1b2b1db5d7c0240237fda8988ef419c5a01c3042 (patch)
treefefba329a2deea1acfd3c97b60502b5f81c103cd /bin/weblogs-merge
parent0ea00fc8c29354a04054a6133b17872c8c3d0461 (diff)
Do weblogs
git-svn-id: svn+ssh://asteria.noreply.org/svn/weaselutils/trunk@203 bc3d92e2-beff-0310-a7cd-cc87d7ac0ede
Diffstat (limited to 'bin/weblogs-merge')
-rwxr-xr-xbin/weblogs-merge79
1 files changed, 79 insertions, 0 deletions
diff --git a/bin/weblogs-merge b/bin/weblogs-merge
new file mode 100755
index 0000000..553bc49
--- /dev/null
+++ b/bin/weblogs-merge
@@ -0,0 +1,79 @@
+#!/usr/bin/ruby
+
+#
+# Copyright (c) 2004,2005 Florian Reitmeir <florian@reitmeir.org>
+# based on a script from Peter Palfrader <peter@palfrader.org>
+#
+# All rights reserved.
+#
+# MIT license.
+#
+
+require 'optparse'
+require 'find'
+
+$VERBOSE = nil
+$NOTHING = nil
+
+def show_help(parser, code=0, io=STDOUT)
+ io.puts parser
+ exit(code)
+end
+ARGV.options do |opts|
+ opts.on_tail("-h", "--help", "Display this help screen") { show_help(opts) }
+ opts.on("-v", "--verbose" , nil, "Be verbose") { $VERBOSE = 1 }
+ opts.on("-n", "--do-nothing" , nil, "Do nothing") { $VERBOSE = 1; $NOTHING = 1 }
+ opts.parse!
+end
+
+root = '/var/www/'
+dir = "/logs-archive/"
+
+year = Time.new.year.to_s
+month = Time.new.month.to_s
+
+Dir.chdir(root)
+
+Dir.glob("*").each{ |client|
+ Dir.chdir(root)
+ next unless File.stat( client ).directory?
+ next unless File.exist?( client + dir )
+ next unless File.stat( client + dir ).directory?
+
+ Dir.chdir(client+dir)
+
+ if $VERBOSE then
+ puts 'pwd :'+root+client+dir
+ end
+
+ if ! File.writable?(root+client+dir) then
+ puts 'log dir not writeable'
+ exit 1
+ end
+
+ files = Array.new
+
+ Find.find(root+client+dir) { |file|
+ if File.file?(file) then
+ files.push(file);
+ end
+ }
+ files.sort! # sort by date (name in this case)
+
+ files.each { |file|
+ if file =~ %r{(.*)-(access|error).log.(\d+)-(\d)+-(\d+)(-\d+)?.gz} then
+ if ($3 == year && $4 == month) then
+ next
+ else
+ store = [$1,$2,$3].join('-')+'.gz'
+ end
+ puts ' src: '+file if $VERBOSE
+ puts 'dest: '+store if $VERBOSE
+ if $NOTHING && system('cat '+file+' >>'+store) then
+ File.unlink(file)
+ end
+ else
+ puts 'did not match: '+file
+ end
+ }
+}