#!/usr/sbin/rsct/perl5/bin/perl
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2000,2007 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
# @(#)27   1.14   src/rsct/rm/SensorRM/cli/bin/chsensor.perl, sensorcli, rsct_relgh, relghs001a 8/7/06 15:38:05

# Changes 1 or more attributes of a resource from the RMC IBM.Sensor class

use strict;
use locale;
BEGIN
  {
	# this enables us to redirect where it looks for other RSCT files during development
	$::rsctroot = $ENV{'RSCT_ROOT'} || '/usr/sbin/rsct';
	$::rsctpm = "$::rsctroot/pm";
	$::rsctmsgmaps = "$::rsctroot/msgmaps";
  }

use lib $::rsctpm;
use Getopt::Std;
use CT_cli_utils qw(printIMsg printEMsg);

$main::PROGNAME = 'chsensor';
$main::MSGCAT = 'sensorcli.cat';
$main::LSMSG = '/usr/sbin/rsct/bin/ctdspmsg';

# For the usage, see sensorcli.msg
sub usage { printIMsg('IMsgChsensorUsage_new');  exit (scalar(@_) ? $_[0] : 1); }

# Parse the cmd line args and check them
if (! getopts('i:an:hvV') ) { &usage; }
if ($::opt_h) { &usage(0); }
if (scalar(@ARGV) < 1 || 
    (scalar(@ARGV) == 1 && !defined($::opt_i)) ||
    ($::opt_a && $::opt_n)) 
{ 
   &usage;
}

if ($::opt_V) { $::opt_v = 1; }

if (defined($::opt_i))
   {
     if (scalar(@ARGV) < 2)
        {
         $::opt_i = "RefreshInterval::$::opt_i";
        }
     else
       { 
         $::opt_i = "::RefreshInterval::$::opt_i";
       }
    }
my $name = shift @ARGV;
my $selectstr = "Name='$name'";

if ($::opt_a || defined($::opt_n))
{
    if ($ENV{CT_MANAGEMENT_SCOPE}!=2 && $ENV{CT_MANAGEMENT_SCOPE}!=3)
    {
        $ENV{CT_MANAGEMENT_SCOPE}=4; 
    }
}

if (defined($::opt_n))
  {
	my @nodes = split(/[, ]+/,$::opt_n);
	#&resolve(\@nodes);
	if (length($selectstr)) { $selectstr .= ' && '; }
	$selectstr .= q/NodeNameList IN ('/ . join("','",@nodes) . q/')/;
  }

if (length($selectstr)) { $selectstr = qq("$selectstr"); }

# We have to parse the attr=val pairs so we can requote the values and replace the equals sign
foreach my $a (@ARGV)
  {
	# Note: we allow a null value
	my ($at, $val) = $a =~ /^\s*(\S+?)\s*=\s*(\S*.*)$/;
	#if (!defined($at)) { $::MSGSET='createnode'; NodeUtils->message('E1','EMsgBAD_ATTR_VAL_FORM'); }
	if (!length($val)) { $val = "''"; }     # chrsrc-api needs something for the value
	# Put quotes around the value to protect spaces or weird chars
	# (if the value already has quotes around it, do not quote it)
	if (!( $val =~ /^(".*"|'.*')$/ ))
	  {
		# if the value has imbedded double quotes, use single quotes
		if ($val =~ /\"/) { $val = qq('$a'); }   # use the other quotes
		else 		# use double quotes
		  {
			$val =~ s/\"/\\\"/sg;     # escape embedded double quotes
			$val = qq("$val");
		  }
	  }
	$a = "${at}::$val";
  }
my $attrvals = join('::', @ARGV);

my $cmd = qq(/usr/bin/chrsrc-api -s IBM.Sensor::${selectstr}::$attrvals$::opt_i 2>&1);
if ($::opt_v) { $main::PROGNAME = 'lssensor'; printIMsg('IMsgRmcCmd', $cmd); $main::PROGNAME = 'chsensor'; }

my @output = `$cmd`;
my $rc= $?;

if ($rc)
{
    if ($rc & 255)
    {
        printEMsg('EMsgChsensorSignalError', "chrsrc-api", $rc);   
    }
    else
    {
        $rc = $rc >> 8;
        if ($output[0] =~ /^ERROR.*/)
        {
            if (!$::opt_v) 
            { 
                $output[0] =~ s/^ERROR.*:://; 
            }
            print $output[0];
        }
        else
        {
            print @output;
            printEMsg('EMsgChsensorNonAPIError', "chrsrc-api", $rc);
        }
    }
}

exit $rc;
