#!/usr/bin/perl
#  $Id: pm_optional 29902 2013-11-29 12:16:08Z teetov $
# -----------------------------------------------------------------------------
#  Name:       pm_optional
#  Purpose:    switch on|off optional processes
#              optional processes should be defined in conf/etc/identity/etc/edit.cfg
#              PM_MASTER_<PROCNAME> defines optiona process for master only
#              PM_<PROCNAME> defines optiona process for node and master
#  Parameters: none
#
#
#  env:        following variables are required:  APL, APL_VAR
# -----------------------------------------------------------------------------
#  Author: A Teetov
#  Edited by:
#  QA by:  Christopher C Gettings
#  Copyright: videoNEXT LLC
# -----------------------------------------------------------------------------

use strict;
use warnings;
use DBI;
use SKM::DB;
use SKM::PM;
use Data::Dumper;
use Log::Log4perl "get_logger";
require "$ENV{APL}/common/bin/logger.patrol";
my $log = get_logger('NEXTCAM::CONF::PM');
$log->info('setup optional processes');

my $CONF="$ENV{APL_VAR}/conf";

#  load all processes
my $dbh = DBNode({'PrintError'=>1,'RaiseError'=>1});
my $procs=$dbh->selectall_hashref('SELECT procname, startup, check_time FROM processes ORDER BY procname','procname',{Slice=>{}});
$dbh->disconnect();
#print Dumper($procs);

#  load attributes
my  $dbm=DBMaster({PrintError=>1,RaiseError => 1});
    $dbm->{ShowErrorStatement} = 1;
my $pm_attrs=$dbm->selectall_hashref("select attr,val from _obj_attr where obj=53 and attr like 'PM_%'",'attr');
$dbm->disconnect();
#print Dumper($pm_attrs);

#  prepare lists for optional processes
my %pm_master;
my %pm_node;
foreach(sort keys %$pm_attrs) {
   if(/PM_MASTER_(\w+)/) {
   	$pm_master{$1}=$pm_attrs->{$_}->{val};
        $pm_master{$1}=0 if $pm_master{$1} !~ /^[01]$/; # protect from incorrect values
   }elsif(/PM_(\w+)/)    {
   	$pm_node{$1}  =$pm_attrs->{$_}->{val};
        $pm_node{$1}=0   if $pm_node{$1} !~ /^[01]$/; # protect from incorrect values
   }
}

my $master=(-f "$CONF/master/s_master")?1:0;
#print Dumper(\%pm_master);
my %pm_all=(%pm_node,%pm_master);  # combine all optional procs in pm_all
foreach(sort keys %$procs) {
        my $PROC=uc($_);
        next if not exists $pm_all{$PROC};
        if(exists $pm_node{$PROC}) {
		toggleProcess($pm_node{$PROC},$_);
		$log->info("Optional process $_ set to $pm_node{$PROC} on node");
        }
	if($master and exists $pm_master{$PROC}) {
		toggleProcess($pm_master{$PROC},$_);
		$log->info("Optional process $_ set to $pm_master{$PROC} on master");
	}
}
$log->info('completed: setup optional processes');
