diff --git a/minecraft/index.cgi b/minecraft/index.cgi index a063c687a..9a47c7adf 100644 --- a/minecraft/index.cgi +++ b/minecraft/index.cgi @@ -49,5 +49,5 @@ print &ui_buttons_row("atboot.cgi", print &ui_buttons_end(); -&ui_print_footer("/", $text{'index_return'}); +&ui_print_footer("/", $text{'index'}); diff --git a/minecraft/lang/en b/minecraft/lang/en index 48620f46e..2052bbe59 100644 --- a/minecraft/lang/en +++ b/minecraft/lang/en @@ -19,5 +19,8 @@ conf_title=Server Configuration users_title=Users and Operators logs_title=View Log File +logs_lines=Show last +logs_matching=lines matching +logs_ok=Search manual_title=Edit Configuration File diff --git a/minecraft/minecraft-lib.pl b/minecraft/minecraft-lib.pl index 24d7f6274..7f15a6baa 100644 --- a/minecraft/minecraft-lib.pl +++ b/minecraft/minecraft-lib.pl @@ -1,4 +1,8 @@ # Functions for editing the minecraft config +# +# XXX java param options +# XXX plugins? +# XXX world reset BEGIN { push(@INC, ".."); }; use strict; @@ -28,6 +32,41 @@ return undef; # If the minecraft server is running, return the PID sub is_minecraft_server_running { +&foreign_require("proc"); +my @procs = &proc::list_processes(); +my $jar = $config{'minecraft_jar'} || + $config{'minecraft_dir'}."/"."minecraft_server.jar"; +my $shortjar = $jar; +$shortjar =~ s/^.*\///; +foreach my $p (@procs) { + if ($p->{'args'} =~ /\Q$config{'java_cmd'}\E.*(\Q$jar\E|\Q$shortjar\E)/) { + return $p->{'pid'}; + } + } +return undef; +} + +# get_minecraft_config() +# Parses the config into an array ref of hash refs +sub get_minecraft_config +{ +my @rv; +my $fh = "CONFIG"; +my $lnum = 0; +&open_readfile($fh, $config{'minecraft_dir'}."/server.properties") || + return [ ]; +while(<$fh>) { + s/\r|\n//g; + s/#.*$//; + if (/^([^=]+)=(.*)/) { + push(@rv, { 'name' => $1, + 'value' => $2, + 'line' => $lnum }); + } + $lnum++; + } +close($fh); +return \@rv; } 1; diff --git a/minecraft/module.info b/minecraft/module.info index e53b4b832..a90b2333d 100644 --- a/minecraft/module.info +++ b/minecraft/module.info @@ -1,3 +1,3 @@ desc=Minecraft Server -depends=init +depends=init proc category=servers diff --git a/minecraft/view_logs.cgi b/minecraft/view_logs.cgi new file mode 100644 index 000000000..80bd41a72 --- /dev/null +++ b/minecraft/view_logs.cgi @@ -0,0 +1,42 @@ +#!/usr/local/bin/perl +# Show the log file, with searching + +use strict; +use warnings; +require './minecraft-lib.pl'; +our (%in, %text, %config); +my $logfile = $config{'minecraft_dir'}."/server.log"; +&ReadParse(); + +$in{'lines'} = undef if ($in{'lines'} !~ /^\d+$/); +$in{'lines'} ||= 20; + +&ui_print_header(undef, $text{'logs_title'}, ""); + +# Search form +print &ui_form_start("view_logs.cgi"); +print "$text{'logs_lines'} ", + &ui_textbox("lines", $in{'lines'}, 5)." ". + "$text{'logs_matching'} ", + &ui_textbox("search", $in{'search'}, 20)." ". + &ui_submit($text{'logs_ok'})."
\n"; +print &ui_form_end()."

\n"; + +# Results +my $cmd; +if ($in{'search'}) { + $cmd = "grep ".quotemeta($in{'search'})." ".quotemeta($logfile)." | ". + "tail -".quotemeta($in{'lines'}); + } +else { + $cmd = "tail -".quotemeta($in{'lines'})." ".quotemeta($logfile); + } +print "

";
+my $fh = "OUT";
+&open_execute_command($fh, $cmd, 1, 1);
+while(<$fh>) {
+	print &html_escape($_);
+	}
+print "
"; + +&ui_print_footer("", $text{'index_return'});