From ddce514fe938b593a0c59161cd08efb537f39108 Mon Sep 17 00:00:00 2001 From: zino Date: Thu, 6 May 2021 13:35:45 +0200 Subject: [PATCH] Add 'Common.pm' --- Common.pm | 139 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 Common.pm diff --git a/Common.pm b/Common.pm new file mode 100644 index 0000000..45a954d --- /dev/null +++ b/Common.pm @@ -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 () { + $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; +