Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

penguinfuz's scratchpad

by penguinfuz (Pilgrim)
on Jun 04, 2004 at 18:06 UTC ( #361083=scratchpad: print w/replies, xml ) Need Help??

Have you seen this package?
sub match_new_rpms() { # Iterate through a listing of updated RPM # packages, comparing them one-by-one against # packages currently installed. my $workdir = $config{workdir}; my $today = $config{today}; my $ver = $config{version}; my @new = `cat ${workdir}/fresh${ver}-${today}`; foreach my $fullpkg (@new) { chomp($fullpkg); my %fresh_n_clean = ($fullpkg => &chop_extension($fullpkg)); foreach my $rpm (keys %fresh_n_clean) { my $args = `rpm -qa | grep $fresh_n_clean{$rpm}`; &download_packages(${fullpkg}) if ($args =~ m/^$/); } } } sub chop_extension() { my $fn = shift; $fn =~ (s/\.i\d{3}\.rpm//g); $fn =~ (s/\.noarch\.rpm//g); $fn =~ (s/\.athlon\.rpm//g); return $fn;
- - - - - - - - - - - - - - - -
Silly split Test.
#! /usr/bin/perl -w use strict; my $string="superdog"; my @array = split//,$string; my $count = @array; print "\$string = $string\n"; print "There are $count characters in $string.\n"; print "Lets push split those $count characters into an array...\n"; for (my $i=0; $i < $count; $i++) { print "\t\@array[$i] = $array[$i]\n"; }
- - - - - - - - - - - - - - - -
MySQL Backup
#! /usr/bin/perl # mysql-backup.pl # Dump and gzip each MySQL database. use warnings; use strict; my $dbhost = "localhost"; my $dbuser = "root"; my $dbpass = "easy1"; my $date = "`date +%Y-%m-%d`"; my $path = "/path/to/dbbpdir"; my $ext = "gz"; &clean_up($path,$ext); my($dbh,$sth,$query); $dbh = (&connect($dbhost,$dbuser,$dbpass)); $query = qq^SHOW DATABASES^; $sth = $dbh->prepare($query); $sth->execute(); while(my $ref = $sth->fetchrow_array()) { my @bp = `mysqldump --user=$dbuser --password=$dbpass --add-drop-t +able $ref | gzip > $path/$ref.$date.$ext`; } $sth->finish(); $dbh->disconnect(); # - - - - - - - - - - - - - - - - - sub connect() { use DBI; my $hostname = shift; my $dbuser = shift; my $dbpass = shift; my $dsn = "DBI:mysql:host=$hostname"; DBI->connect($dsn,$dbuser,$dbpass,{PrintError => 0, RaiseError => 1 +}); } sub clean_up() { $path = shift; $ext = shift; opendir(BP_DIR,"$path") or die "Cannot open $path: $!\n"; my @old_backups = grep { /\.$ext$/ } readdir BP_DIR; closedir(BP_DIR); foreach (@old_backups) { my @args = ("rm","-f","$path/$_"); system(@args); } }
- - - - - - - - - - - - - - - - -
#! /usr/bin/perl -w use strict; my $host="wonderwaylabs.com"; my %rec = getips($host); print "$_ --> $rec{$_}\n" for keys %rec; sub getips { my $host = shift; chomp (my $record = `/usr/bin/host $host`); my ($notfound,$matches,%records); $notfound = '\s{1}not\s{1}found\:'; $matches = '^(\S+).*(\d+\.\d+\.\d+\.\d+)$'; if ($record =~ /$notfound/o) { print "No record for $host\n"; #email_resolution_error($host); } else { %records = ( $1 => $2 ) if $record =~ /$matches/o; } return %records; }
- - - - - - - - - - - - - - - - -
(OLD) Service Health Scanner: See NEW
#! /usr/bin/perl # multimonitor.pl # monitor http,https,smtp on remote servers. use strict; my (@rwebhost,@rswebhost,@rmailhost,$key,%host); # http %host = (); push @rwebhost,"coolsite.com","notcoolsite.com","sheepydeepy.com"; foreach (@rwebhost) { %host = ($_ => &getips($_)); foreach $key (keys %host) { &scan_httpd($host{$key},$key); } } # https push @rswebhost,"secure.coolsite.com"; foreach (@rswebhost) { %host = ($_ => &getips($_)); foreach $key (keys %host) { &scan_httpsd($host{$key},$key); } } # smtp push @rmailhost,"mail.sheepydeepy.com"; foreach (@rmailhost) { %host = ($_ => &getips($_)); foreach $key (keys %host) { &scan_smtp($host{$key},$key); } } sub getips() { my $host = shift; my ($name,$aliases,$addrtype,$length,@addrs,@ips); (($name, $aliases, $addrtype, $length, @addrs) = gethostbyname($host +)) || &email_resolution_error($host); foreach (@addrs) { @ips = join('.',unpack('C4',$_)),"\n"; return @ips; } } # =================================== sub scan_httpd() { # Scan for HTTP service. my @ips = shift; my @hostname = shift; my $port = "80"; for (my $i = 0; $i < @ips; $i++) { my @results = `/usr/bin/nmap -P0 -p$port -oG - $ips[$i] | grep \"S +tatus: Up\"`; for (@results) { &email_connection_error($hostname[$i]) if $_ =~ $ips[$i]; } } } sub scan_httpsd() { # Scan for HTTPS service. my @ips = shift; my @hostname = shift; my $port = "443"; for (my $i = 0; $i < @ips; $i++) { my @results = `/usr/bin/nmap -P0 -p$port -oG - $ips[$i] | grep \"S +tatus: Up\"`; for (@results) { &email_connection_error($hostname[$i]) if $_ =~ $ips[$i]; } } } sub scan_smtp() { # Scan for SMTP service. my @ips = shift; my @hostname = shift; my $port = "25"; for (my $i = 0; $i < @ips; $i++) { my @results = `/usr/bin/nmap -P0 -p$port -oG - $ips[$i] | grep \"S +tatus: Up\"`; for (@results) { &email_connection_error($hostname[$i]) if $_ =~ $ips[$i]; } } } sub email_resolution_error() { my $rnode = shift; my $hostname = `/bin/uname -n`; chomp($hostname); open(SENDMAIL, "|/usr/lib/sendmail -oi -t") or die "Cannot fork for sendmail: $!\n"; print SENDMAIL <<EOF; From: Multi-Monitor <nobody\@monitor.domain.com> To: System Admin <someone\@anotherdomain.com>,somemobile\@otherdomain. +net Subject: The domain $rnode cannot be resolved! This email is generated by the Multi-Monitor script on $hostname... WARNING: The domain $rnode cannot be resolved! EOF close(SENDMAIL) or warn "Oops, sendmail did not close nicely"; } sub email_connection_error() { my $hostname = `/bin/uname -n`; my $remote_server = shift; chomp($hostname); chomp($remote_server); # switch $remote_server back to a hostname. open(SENDMAIL, "|/usr/lib/sendmail -oi -t") or die "Cannot fork for sendmail: $!\n"; print SENDMAIL <<EOF; From: Multi-Monitor <nobody\@monitor.domain.com> To: System Admin <someone\@anotherdomain.com>,somemobile\@otherdomain. +net Subject: Connection Trouble on $remote_server! This email is generated by the Mulit-Monitor script on $hostname... WARNING: $remote_server cannot be contacted! EOF close(SENDMAIL) or warn "Oops, sendmail did not close nicely"; }
- - - - - - - - - - - - - - - - -
Log In?
Username:
Password:

What's my password?
Create A New User
Chatterbox?
[Corion]: choroba: Yeah, but handing off the request to Dancer,Plack, Mojolicious,LWP is easy once I have the data filled into some structure ;))
[choroba]: Algorithm::Loops
[Corion]: choroba: I'm using that to generate the permutations, but I don't know how the user can pass the intended values to my function in a sane way
[Corion]: I have a prototype that permutes the get_parameters, but the values used for the get parameters should be different from the values used for the headers and potentially for parts of the URL
[Corion]: But yes, in general, my approach will be "split the URL into another set of parameters, generate an array of allowed values for each parameter and then NestedLoops() over the set"
[choroba]: hmm... so you need something like bag from Test::Deep, but not for checking, but for generation
[Corion]: This has the dual use of easily requesting sequential URLs and also being suitable for testing
[Corion]: For testing, I want to skip all tests with the same value(s) once one test fails to cut down on the number of failing tests
[Corion]: choroba: Yes, in a way I
[Corion]: ... I'm treating the incoming value sets as bags... Maybe I'll just put the burden on the user, at least in the first attempt at a full API. generate( headers => [{ 'Content-Type' => 'text/plain' }, {'Content-Type' => 'text/json' ] ), even ...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (5)
As of 2017-01-17 08:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Do you watch meteor showers?




    Results (152 votes). Check out past polls.