Add 'Common.pm'

This commit is contained in:
zino
2021-05-06 13:35:45 +02:00
parent 49dd186111
commit ddce514fe9

139
Common.pm Normal file
View File

@@ -0,0 +1,139 @@
package Common;
require Exporter;
@ISA = qw(Exporter);
@EXPORT_OK = qw(check_running debug set_debug get_slave get_master get_tmp_file);
use warnings;
use strict;
use English;
# requires dbi lib, for ubuntu use apt install libdbd-mysql-perl libdbi-perl
use DBI;
use Sys::Hostname;
# requires yaml lib, for ubuntu use apt install libyaml-libyaml-perl
use YAML::XS 'LoadFile';
my $hostname = hostname;
my $config = LoadFile('batch_config.yaml');
##################################################################
# This module contains common subroutines used by our batch
# scripts.
#
# Changes:
# 2016-08-23 (bfr)
# - added method get_tmp()
# 2016-08-16 (dzo)
# - switch config from ENV to YAML file
# 2011-06-27 (rja)
# - initial version
# - copied methods am_i_running(), and debug()
# - added methods check_running(), set_debug()
# - added variable $DEBUG
##################################################################
my $DEBUG = 0; # 1 = on, 0 = off
#
# returns a connection using the settings provided in the config file (key: 'slave')
#
sub get_slave {
return get_connection("slave");
}
#
# returns a connection using the settings provided in the config file (key 'master')
#
sub get_master {
return get_connection("master");
}
#
# returns tmp dir
#
sub get_tmp_file {
my $tmp_file = shift;
return $config->{'tmp'} . "/" . $tmp_file;
}
#
# returns a connection using the configured environment variables
#
# arguments:
# host - name of the config key (either "master" or "slave")
#
sub get_connection {
my $host = shift;
return DBI->connect(
"DBI:mysql:" .
"database=" . $config->{$host}->{"db"} . ";" .
"host=" . $config->{$host}->{"host"} . ":" . $config->{$host}->{"port"} . ";" .
"mysql_socket=" . $config->{$host}->{"sock"},
#"mysql_socket=",
$config->{$host}->{"user"},
$config->{$host}->{"pass"},
{
RaiseError => 1,
AutoCommit => 0,
"mysql_enable_utf8" => 1,
"mysql_auto_reconnect" => 1
}
);
}
sub check_running {
my $name = ${PROGRAM_NAME};
$name =~ s|.*/||;
if (am_i_running(get_tmp_file("${name}.pid"))) {
print STDERR "another instance of $PROGRAM_NAME is running on $hostname. Aborting this job.\n";
exit;
}
}
# INPUT: location of lockfile
# OUTPUT: 1, if a lockfile exists and a program with the pid inside
# the lockfile is running
# 0, if no lockfile exists or the program with the pid inside
# the lockfile is NOT running; resets the pid in the pid
# to the current pid
sub am_i_running {
my $LOCKFILE = shift;
my $PIDD;
if (open (FILE, "<$LOCKFILE")) {
while (<FILE>) {
$PIDD = $_;
}
close (FILE);
chomp($PIDD);
if (kill(0,$PIDD)) {
return 1;
}
}
open (FILE, ">$LOCKFILE") or die "Could not open lockfile $LOCKFILE: $!\n";
print FILE $$;
close (FILE);
return 0;
}
# 1 = on, 0 = off
sub set_debug {
$DEBUG = shift;
}
# logs statements if debugging is enabled
sub debug {
my $msg = shift;
if ($DEBUG) {
my $date = `date +"%Y-%m-%d %H:%M:%S"`;
chomp($date);
print STDERR "$date: $msg\n";
}
}
1;