1 |
dpavlin |
40 |
package WM::System; |
2 |
|
|
|
3 |
|
|
use strict; |
4 |
|
|
use warnings; |
5 |
|
|
|
6 |
|
|
use base 'Mojolicious::Controller'; |
7 |
|
|
|
8 |
|
|
use Data::Dump qw/dump/; |
9 |
|
|
use JSON; |
10 |
|
|
|
11 |
|
|
my $remote = 'ssh mjesec'; |
12 |
dpavlin |
41 |
#$remote = ''; # FIXME |
13 |
dpavlin |
40 |
|
14 |
|
|
sub exhibit { |
15 |
|
|
my ($self, $c) = @_; |
16 |
|
|
warn "## c = ",dump( $c ); |
17 |
|
|
$c->render; |
18 |
|
|
} |
19 |
|
|
|
20 |
|
|
=for later |
21 |
|
|
|
22 |
|
|
sub vzlist { |
23 |
|
|
my ($self, $c) = @_; |
24 |
|
|
|
25 |
|
|
$self->text_plain( $c->res, 'sudo /usr/sbin/vzlist' ); |
26 |
|
|
|
27 |
|
|
} |
28 |
|
|
|
29 |
|
|
|
30 |
|
|
sub text_plain { |
31 |
|
|
my ( $self, $res, $command ) = @_; |
32 |
|
|
$res->code(200); |
33 |
|
|
$res->headers->content_type('text/plain'); |
34 |
|
|
$res->body( scalar `COLUMNS=128 $remote $command` ); |
35 |
|
|
} |
36 |
|
|
|
37 |
|
|
|
38 |
|
|
=cut |
39 |
|
|
|
40 |
|
|
sub json { |
41 |
|
|
my ( $self, $res, $data ) = @_; |
42 |
|
|
$res->code(200); |
43 |
|
|
$res->headers->content_type('application/javascript'); |
44 |
|
|
$res->body( to_json( $data ) ); |
45 |
|
|
} |
46 |
|
|
|
47 |
|
|
|
48 |
|
|
sub df { |
49 |
|
|
my ($self, $c) = @_; |
50 |
|
|
|
51 |
|
|
my $df = `$remote df -k`; |
52 |
|
|
my @lines = split(/\n/, $df); |
53 |
|
|
my @header = map { lc($_) } split(/\s+/, shift @lines, 6); |
54 |
|
|
|
55 |
dpavlin |
41 |
my @items; |
56 |
dpavlin |
40 |
my $number; |
57 |
|
|
|
58 |
|
|
while ( @lines ) { |
59 |
dpavlin |
41 |
my $item; |
60 |
dpavlin |
40 |
my @v = split(/\s+/, shift @lines); |
61 |
|
|
if ( $#v == 0 ) { |
62 |
dpavlin |
41 |
my $cont = shift @lines; |
63 |
|
|
$cont =~ s/^\s+//; |
64 |
|
|
push @v, split(/\s+/, $cont); |
65 |
dpavlin |
40 |
} |
66 |
|
|
foreach my $i ( 0 .. $#header ) { |
67 |
|
|
my $name = lc( $header[$i] ); |
68 |
|
|
$name =~ s/[^a-z0-9]+/_/g; |
69 |
|
|
$name =~ s/^([0-9])/_$1/; |
70 |
|
|
$name =~ s/_+$//; |
71 |
|
|
my $val = $v[$i]; |
72 |
|
|
$number->{$name}++ if $val =~ s/^(\d+)%?$/$1/; |
73 |
dpavlin |
41 |
$item->{ $name } = $val; |
74 |
dpavlin |
40 |
|
75 |
dpavlin |
41 |
$item->{ label } = $val if $name =~ m/mounted/; |
76 |
dpavlin |
40 |
} |
77 |
|
|
warn "left ",dump(@v) if @v; |
78 |
dpavlin |
41 |
push @items, $item; |
79 |
dpavlin |
40 |
} |
80 |
|
|
|
81 |
dpavlin |
41 |
warn "# items = ",dump( @items ); |
82 |
|
|
warn "# number [$#items] = ",dump( $number ); |
83 |
dpavlin |
40 |
|
84 |
|
|
$self->json( $c->res, { |
85 |
dpavlin |
41 |
items => [ @items ], |
86 |
dpavlin |
40 |
properties => { |
87 |
|
|
map { $_ => { valueType => 'number' } } |
88 |
dpavlin |
41 |
grep { $number->{$_} == $#items + 1 } |
89 |
dpavlin |
40 |
keys %$number |
90 |
|
|
} |
91 |
|
|
} ); |
92 |
|
|
} |
93 |
|
|
|
94 |
|
|
1; |