Skip to content

Commit

Permalink
Add container logs and inspection
Browse files Browse the repository at this point in the history
  • Loading branch information
dave-lang committed Jul 11, 2023
1 parent b62594d commit 2ac5ac8
Show file tree
Hide file tree
Showing 6 changed files with 107 additions and 26 deletions.
3 changes: 1 addition & 2 deletions docker/command.cgi
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/usr/bin/perl

require './docker-lib.pl';
#ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1);
ui_print_header(undef, &text('index_title'), "", undef, 1, 1);
&ReadParse();
&error_setup($text{'command_err'});

Expand All @@ -21,6 +21,5 @@ if ($command == 'restart') {

#&error($err) if ($err);

#sleep(3);
&webmin_log(ucfirst($command), 'docker container', $in{'container'});
&redirect("");
34 changes: 22 additions & 12 deletions docker/docker-lib.pl
Original file line number Diff line number Diff line change
Expand Up @@ -78,28 +78,38 @@ sub get_stats

sub inspect_container
{
my ($containers, $fail);
my $code = execute_command('docker inspect --all --no-stream --format "{{.ID}},{{.CPUPerc}},{{.MemPerc}},{{.MemUsage}}"', undef, \$containers, \$fail, 0, 1);
my($container) = @_;
my ($result, $fail);
# my $code = execute_command('docker inspect ' . $container . ' --format "{{json .}}"', undef, \$result, \$fail, 0, 1);
my $code = execute_command('docker inspect ' . $container, undef, \$result, \$fail, 0, 1);

if ($code != 0) {
return $fail;
}

my %results = ( );
my @containers = split(/\n/, $containers);
# my $json = decode_json($result);
# if ($json->{ServerErrors}) {
# return $json->{ServerErrors}[0];
# }

foreach my $u (@containers) {
my ($id, $cpu, $mem, $memUsage) = split(/,/, $u);
$results{$id} = {
'cpu' => $cpu,
'mem' => $mem,
'memUsage' => $memUsage
};
# return 0, $json, $result;
return 0, $result;
}

sub container_logs
{
my($container) = @_;
my ($result, $fail);
my $code = execute_command('docker logs ' . $container, undef, \$result, \$fail, 0, 1);

if ($code != 0) {
return $fail;
}

return 0, %results;
return 0, $result;
}


sub start_container
{
my($container) = @_;
Expand Down
27 changes: 18 additions & 9 deletions docker/index.cgi
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
#!/usr/bin/perl
# use strict;
use strict;
use warnings;
use Data::Dumper;

require 'docker-lib.pl';

ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1);
ui_print_header(undef, &text('index_title'), "", undef, 1, 1);

@tabs = ( [ 'info', $text{'tab_info'} ],
[ 'containers', $text{'tab_containers'} ] );
if (!&has_command('docker')) {
&ui_print_endpage(&text('not_installed')); #, "<tt>$config{'syslog_conf'}</tt>", "../config.cgi?$module_name"));
}

my @tabs = ( [ 'info', &text('tab_info') ],
[ 'containers', &text('tab_containers') ] );

print ui_tabs_start(\@tabs, 'info', 'containers', 1);

Expand All @@ -30,23 +34,28 @@ my($stat_fail, %stats) = get_stats();
if ($fail) {
print ui_alert_box($fail, 'danger');
} else {
print ui_columns_start([$text{'label_name'}, $text{'label_label'}, $text{'label_runningfor'}, $text{'label_cpu'}, $text{'label_mem'}, ' ' ]);
print ui_columns_start([&text('label_name'), &text('label_label'), &text('label_runningfor'), &text('label_cpu'), &text('label_mem'), ' ' ]);
foreach my $u (@containers) {
print ui_columns_row([
html_escape($u->{'name'}),
html_escape($u->{'image'}),
html_escape($u->{'status'}),
html_escape($stats{$u->{'id'}}{'cpu'}),
html_escape($stats{$u->{'id'}}{'memUsage'}) . " (" . html_escape($stats{$u->{'id'}}{'mem'}) . ")",
sprintf("<a href='command.cgi?c=start&container=%s'>%s</a>", urlize($u->{'name'}), $text{'command_start'}),
sprintf("<a href='command.cgi?c=stop&container=%s'>%s</a>", urlize($u->{'name'}), $text{'command_stop'}),
sprintf("<a href='command.cgi?c=restart&container=%s'>%s</a>", urlize($u->{'name'}), $text{'command_restart'}),
sprintf("<a href='command.cgi?c=start&container=%s'>%s</a>", urlize($u->{'name'}), &text('label_start')),
sprintf("<a href='command.cgi?c=stop&container=%s'>%s</a>", urlize($u->{'name'}), &text('label_stop')),
sprintf("<a href='command.cgi?c=restart&container=%s'>%s</a>", urlize($u->{'name'}), &text('label_restart')),
&ui_link('logs.cgi?container=' . urlize($u->{'id'}), 'View log'),
&ui_link('inspect.cgi?container=' . urlize($u->{'id'}) . '&view=1', 'Inspect container')
]);
}
print ui_columns_end();
}

print ui_tabs_end_tab('mode', 'containers');

print ui_tabs_end();

ui_print_footer("/", $text{'index'});
ui_print_footer("/", &text(('index')));

# if using authentic theme, enable codemirror for readability
30 changes: 30 additions & 0 deletions docker/inspect.cgi
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

require './docker-lib.pl';
&ReadParse();

our (%in);

my $container = $in{'container'};

ui_print_header("<tt>".&html_escape($container)."</tt>", text('index_title'), "", undef, undef, $in{'nonavlinks'});

my ($failed, $result) = inspect_container($container);
if ($failed) {
&ui_print_endpage(ui_alert_box($failed, 'danger'), "Back", "/");
}

print &ui_form_start("inspect.cgi");
print &ui_hidden("container", $container),"\n";
print &ui_submit(text('label_refresh'));
print &ui_form_end(),"<br>\n";

print "<pre>" . $result . "</pre>";

&ui_print_footer("", text('index_return'));

# if using authentic theme, enable codemirror for readability
print "<script type='text/javascript'>if (window.viewer_init) { viewer_init() }; </script>";
9 changes: 6 additions & 3 deletions docker/lang/en
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
index_title=Docker container management
not_installed=Docker was not found on this system
index_return=container list

tab_info=Docker Info
tab_containers=Containers
Expand All @@ -11,6 +13,7 @@ label_runningfor=Running for
label_cpu=CPU
label_mem=MEM

command_start=Start
command_stop=Stop
command_restart=Restart
label_start=Start
label_stop=Stop
label_restart=Restart
label_refresh=Refresh
30 changes: 30 additions & 0 deletions docker/logs.cgi
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

require './docker-lib.pl';
&ReadParse();

our (%in);

my $container = $in{'container'};

ui_print_header("<tt>".&html_escape($container)."</tt>", text('index_title'), "", undef, undef, $in{'nonavlinks'});

my ($failed, $result) = container_logs($container);
if ($failed) {
&ui_print_endpage(ui_alert_box($failed, 'danger'), "Back", "/");
}

print &ui_form_start("inspect.cgi");
print &ui_hidden("container", $container),"\n";
print &ui_submit(text('label_refresh'));
print &ui_form_end(),"<br>\n";

print "<pre>" . Dumper($result) . "</pre>";

&ui_print_footer("", text('index_return'));

# if using authentic theme, enable codemirror for readability
print "<script type='text/javascript'>if (window.viewer_init) { viewer_init() }; </script>";

0 comments on commit 2ac5ac8

Please sign in to comment.