1#!/usr/bin/env perl
2# $Id: calc_mem_use.pl,v 1.3 2015/04/21 13:20:29 kostik Exp kostik $
3
4use strict;
5use warnings;
6require Data::Dumper;
7
8my $in_z = 0;
9my $in_m = 0;
10my $total_z = 0;
11my $total_zf = 0;
12my $total_m = 0;
13
14while (<>) {
15	chomp;
16	if (/Type\s+InUse\s+MemUse\s+HighUse\s+Requests\s+Size\(s\)/) {
17		$in_z = 0;
18		$in_m = 1;
19		next;
20	}
21	if (/ITEM\s+SIZE\s+LIMIT\s+USED\s+FREE\s+REQ\s+FAIL\s+SLEEP/) {
22		$in_z = 1;
23		$in_m = 0;
24		next;
25	}
26	if ($in_z) {
27		(my @fields) = split /:|,/;
28#print Data::Dumper::Dumper(\@fields);
29		next unless ($#fields >= 7);
30		my $size = $fields[1];
31		my $used = $fields[3];
32		my $free = $fields[4];
33		$total_z += int($size) * int($used);
34		$total_zf += int($size) * int($free);
35		next;
36	}
37	if ($in_m) {
38		my $line = $_;
39		while (1) {
40			$line =~ s/^\s+//;
41			last unless ($line =~ s/^[a-zA-Z][a-zA-Z0-9\.\-_]*//);
42		}
43		my @fields;
44		@fields = split(/\s+/, $line);
45		my $memuse_s = $fields[1];
46		my $memuse;
47		if ($memuse_s =~ s/K$//) {
48			$memuse = int($memuse_s) * 1024;
49		} elsif ($memuse_s =~ s/M$//) {
50			$memuse = int($memuse_s) * 1024 * 1024 ;
51		} else {
52			$memuse = int($memuse_s);
53		}
54		$total_m += $memuse;
55		next;
56	}
57}
58
59printf "Zones: %dK ZoneFree: %dK Malloc: %dK Total: %dK\n",
60  $total_z / 1024, $total_zf / 1024, $total_m / 1024,
61  ($total_z + $total_zf + $total_m) / 1024;
62