Difference between revisions of "Commands.pl"

From Organic Design wiki
(use db from hardwired table)
m (Modify sandbox subrountine to clear Template:Sandbox aswell)
Line 143: Line 143:
 
wikiLogin( $::wiki, $::peer, $::pwd1 );
 
wikiLogin( $::wiki, $::peer, $::pwd1 );
 
wikiPageEdit( $::wiki, 'Sandbox', '', 'Who left that mess in my sandbox dammit!' ) if wikiRawPage( $::wiki, 'Sandbox' );
 
wikiPageEdit( $::wiki, 'Sandbox', '', 'Who left that mess in my sandbox dammit!' ) if wikiRawPage( $::wiki, 'Sandbox' );
 +
wikiPageEdit( $::wiki, 'Template:Sandbox', '', 'Who left that mess in my sandbox dammit!' ) if wikiRawPage( $::wiki, 'Template:Sandbox' );
 
}
 
}
  

Revision as of 19:53, 6 April 2006

use Net::SCP::Expect;

  1. Get initial IP from local wiki log

$::IP = ; if ( wikiRawPage( $::wiki, $::wikilog ) =~ /^.+to ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/sm ) { $::IP = $1; logAdd "Last IP obtained from Network Log: $::IP"; }

sub command {

my $command = shift; $command =~ /(.+?)(\((.+)\))?$/; my ($title, $args) = ( $1, $2 ); my $article;

# pon/poff if ($title eq 'ppp') { $article = `ifconfig` } elsif ($title eq 'pon') { `pon`; $article = `tail -n 1 /var/log/syslog|grep pppd`; } elsif ($title eq 'poff') { `poff`; $article = `tail -n 3 /var/log/syslog|grep pppd`; }

# syslog elsif ($title eq 'syslog') { $article = `tail -n 50 /var/log/syslog` }

# peer log elsif ($title eq 'peerlog') { $article = qx( tail -n 50 ../$peer.log ) }

# reboot elsif ($title eq 'reboot') { $article = `shutdown -r now` }

# shutdown elsif ($title eq 'shutdown') { $article = `halt` }

# ps elsif ($title eq 'env') { $^V =~ m/(.)(.)(.)/; my $ver = ord($1).'.'.ord($2).'.'.ord($3); $cmd =~ /^(.+?)\s+(.+)/; $article = "Environment:\nOS:\t$^O\nPERL:\t$1 ($ver)\nDaemon:\t$2\n\n"; $article .= "Current instances of $::peer:\n"; $article .= qx( ps aux|grep "$::daemon\[:] $::peer" ); }

# fileSync elsif ($title eq 'fileSync') { $article = 'Manually executing fileSync()...'; spawn 'fileSync'; }

# wikiSync elsif ($title eq 'wikiSync') { $article = 'Manually executing wikiSync()...'; spawn 'wikiSync'; }

# wikiBackup elsif ($title eq 'wikiBackup') { $article = 'Manually executing wikiBackup()...'; spawn 'wikiBackup'; }

# peerBackup elsif ($title eq 'peerBackup') { $article = 'Manually executing peerBackup()...'; spawn 'peerBackup'; }

# scpBackups elsif ($title eq 'scpBackups') { $article = 'Manually executing scpBackups()...'; spawn 'scpBackups'; }

# swfCompile elsif ($title eq 'swfCompile') { $article = swfCompile(); }

# Restart # - For some reason it fucks up if it doesn't wait for a minute # - 2005-12-09 tried closing handles and server->shutdown(SHUT_RDWR) but made no difference elsif ($title eq 'restart') { logAdd "$daemon is restarting using: $::cmd"; killChildren(); exec "sleep 1; $::cmd"; }

elsif ($title eq 'stop') { logAdd "$daemon is stopping"; killChildren(); exit; }

else { logAdd $article = "Unknown command: $command" }

return $article; }

  1. Kill all processes related to this peer

sub killChildren { for ( split /\n/, qx( ps x|grep "$::daemon\[:] $::peer" ) ) { if ( /^\s*([0-9]+).+?\d+:\d\d\s*(.+)/ and $1 != $$ ) { qx( kill $1 ); logAdd "Kill $2 ($1)"; } } logAdd "Kill $0 ($$)"; }

  1. Backup wiki LocalFS cache

sub peerBackup { my $file = '/var/www/wiki/peer.tgz'; qx( tar -czf $file ./ ); my $size = int( [ stat $file ]->[7] / 104857.6 + 0.5 ) / 10; my $comment = "Peer Backup: $file ($size\MB)"; logAdd $comment; wikiLogin( $::wiki, $::peer, $::pwd1 ); wikiPageAppend( $::wiki, $::wikilog, "\n*".localtime()." : $comment", $comment ); }

  1. Backup wiki database

sub wikiBackup { my $lpf = lc $::peers{$::peer}->[0]; my $db = $::peers{$::peer}->[3]; my $name = "$lpf-wiki-db-".strftime( "%Y-%m-%d", localtime ); qx( mkdir ../$name ); qx( cp -R /var/www/wiki/images ../$name/images ); qx( mysqldump $db -u peer --password=$::pwd1 > ../$name/$db.sql ); qx( tar -czf ../$name.tgz ../$name ); qx( rm -R ../$name ); chmod 0600, "../$name.tgz"; my $size = int( [ stat "../$name.tgz" ]->[7] / 104857.6 + 0.5 ) / 10; my $comment = "Wiki Backup: $name.tgz ($size\MB)"; logAdd $comment; wikiLogin( $::wiki, $::peer, $::pwd1 ); wikiPageAppend( $::wiki, $::wikilog, "\n*".localtime()." : $comment", $comment ); }

  1. Transfer the days backup over SSH using SCP

sub scpBackups { my $ext = '-wiki-db-'.strftime( "%Y-%m-%d", localtime ); my $lpf = lc $::peers{$::peer}->[0]; my $lp = lc $::peer; my $domain = 'organicdesign.co.nz'; $domain = "merdian.$domain" if $lpf eq 'od'; my $name = "$lpf$ext.tgz"; my $scp = new Net::SCP::Expect auto_yes => 1, preserve => 1; $scp->login( $lp, $::pwd1 ); $scp->scp( "../$name", "$domain:/home/$lp" ); my $comment = "$name transferred over SSH"; logAdd $comment; wikiLogin( $::wiki, $::peer, $::pwd1 ); wikiPageAppend( $::wiki, $::wikilog, "\n*".localtime()." : $comment", $comment ); }

  1. Clear sandbox

sub clearSandbox { wikiLogin( $::wiki, $::peer, $::pwd1 ); wikiPageEdit( $::wiki, 'Sandbox', , 'Who left that mess in my sandbox dammit!' ) if wikiRawPage( $::wiki, 'Sandbox' ); wikiPageEdit( $::wiki, 'Template:Sandbox', , 'Who left that mess in my sandbox dammit!' ) if wikiRawPage( $::wiki, 'Template:Sandbox' ); }

  1. Return IP address according to router

sub getIP { my $i = qx( lynx -source -auth=admin:$::pwd2 http://192.168.0.254/wancfg.cmd?action=view ); return $i = ($i =~ /([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/) ? $1 : ; }

  1. update IP with zoneedit.com if changed

sub checkIP { while (1) { my $i = getIP; if ( ($i ne ) && ($i ne $::IP) ) { qx( lynx -source -auth=ADunkley:$::pwd1 http://dynamic.zoneedit.com/auth/dynamic.html?host=www.organicdesign.co.nz ); qx( lynx -source -auth=ADunkley:$::pwd1 http://dynamic.zoneedit.com/auth/dynamic.html?host=organicdesign.co.nz); logAdd my $comment = "External IP has changed to $i, updated DNS records."; $::IP = $i; # update the IP log on the wiki wikiLogin( $::wiki, $::peer, $::pwd1 ); wikiPageAppend( $::wiki, $::wikilog, "\n*".localtime()." : $comment", $comment ); } sleep 10; } }