#!/usr/bin/perl use strict; use warnings; my $s3_id = exists $ENV{'s3_id'} ? $ENV{'s3_id'} : "user"; my $s3curl = "perl s3-curl/s3curl.pl --id $s3_id -- -s -S"; sub get_bucket_list() { my $buckets = `$s3curl http://s3.amazonaws.com`; my $str = $buckets; my @bucket_list; while ($buckets =~ s/.([\w._-]+)<\/Name>//) { push @bucket_list, $1; } return @bucket_list; } my @bucket_list = split /\s+/, ($ENV{'buckets'} || ''); if (not @bucket_list) { @bucket_list = get_bucket_list(); } if ($ARGV[0] and $ARGV[0] eq "autoconf") { if (@bucket_list) { print "yes\n"; } else { print "no\n"; } exit 0; } sub get_bucket_stats { my ($name) = @_; my $stats = `$s3curl http://$name.s3.amazonaws.com`; my %res; $res{'size'} = 0; while ($stats =~ s/.([\w._-]+)<\/Size>//) { $res{'size'} += $1; $res{'count'}++; } return %res; } if ($ARGV[0] and $ARGV[0] eq "config") { # The headers print "graph_title S3 Storage Usage\n"; print "graph_category cloud\n"; print "graph_args --base 1024 -l 0\n"; print "graph_vlabel bytes\n"; print "graph_info Plugin available at https://github.com/aptivate/munin-contrib/blob/master/plugins/s3/s3_storage\n"; foreach my $bucket_name (@bucket_list) { print "$bucket_name.label Bucket $bucket_name\n"; } exit; } foreach my $bucket_name (@bucket_list) { my %stats = get_bucket_stats($bucket_name); print "$bucket_name.value " . $stats{'size'} . "\n"; } exit 0;