use Ops::Exec qw(ops_do_ssh_shell ops_new_context ops_new_cmd); use Ops::Config qw(ops_get_servers); my %servers = map { $_ => new_server($_) } ops_get_servers('foo'); my @contexts = map {ops_new_context({ name => $servers{$_}{name}, user => 'foo', host => $servers{$_}{host}, key => $ENV{HOME} . '/.ssh/id_rsa.foo.prod', commands => [ ops_new_cmd({ name => 'capacity', command => 'df -k /home'}), ops_new_cmd({ name => 'process_type1', command => 'ps -ef | grep process_type1 | grep -v grep | wc -l'}), ops_new_cmd({ name => 'process_type2', command => 'ps -ef | grep process_type2 | grep -v grep | wc -l'}) ] })} sort keys %servers; for my $ctxt (@contexts) { if ($local_state->{status} eq 'success') { my $ctxt_status = ops_do_ssh_shell($ctxt); for my $cmd_status (@{$ctxt_status->{commands}}) { if ( $ctxt_status->{success} ) { $servers{$ctxt_status->{name}}{$cmd_status->{name}} = $cmd_status->{output}; } else { $local_state->{status} = 'failure'; $local_state->{stack_trace} = $cmd_status; } } } } if ($local_state->{status} eq 'success') { for my $server (keys %servers) { $servers{$server}{capacity} = parse_capacity($servers{$server}{capacity}); # further parsing and validation } } # statuses are evaluated to generate warnings and alerts # texts and emails are sent yadda yadda