2017-11-14 15:17:27 +01:00
// ______ __ _______ _______ _______
//| __ \.---.-.-----.--| |.-----.----.---.-. | ___| | | __|
//| __/| _ | | _ || _ | _| _ | | ___| |__ |
//|___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
//
// ============================================================================
2020-11-27 13:52:35 +01:00
// Copyright (c) 2007-2021 Artica Soluciones Tecnologicas, http://www.artica.es
2017-11-14 15:17:27 +01:00
// This code is NOT free software. This code is NOT licenced under GPL2 licence
// You cannnot redistribute it without written permission of copyright holder.
// ============================================================================
import java.util.* ;
import java.net.MalformedURLException ;
import java.net.URL ;
import javax.xml.datatype.* ;
import javax.xml.namespace.QName ;
import Intel_Dcm.* ;
public class IntelDcmPlugin {
private static QName qName = new QName ( " http://wsdl.intf.dcm.intel.com/ " , " Dcm " ) ;
private static String result = " " ;
private static URL url = null ;
private static boolean retry = true ;
private static int retries = 0 ;
private static final int MAX_RETRIES = 10 ;
private static Dcm dcm ;
private static String getParam ( String key , String [ ] params ) {
key = " -- " + key ;
for ( int i = 0 ; i < params . length ; i + + ) {
if ( key . equals ( params [ i ] ) ) {
return params [ i + 1 ] ;
}
}
return " " ;
}
private static QueryType strToQueryType ( String str ) {
if ( str . equals ( " max_pwr " ) ) {
return QueryType . MAX_PWR ;
} else if ( str . equals ( " avg_pwr " ) ) {
return QueryType . AVG_PWR ;
} else if ( str . equals ( " min_pwr " ) ) {
return QueryType . MIN_PWR ;
} else if ( str . equals ( " max_avg_pwr " ) ) {
return QueryType . MAX_AVG_PWR ;
} else if ( str . equals ( " total_max_pwr " ) ) {
return QueryType . TOTAL_MAX_PWR ;
} else if ( str . equals ( " total_avg_pwr " ) ) {
return QueryType . TOTAL_AVG_PWR ;
} else if ( str . equals ( " max_avg_pwr_cap " ) ) {
return QueryType . MAX_AVG_PWR_CAP ;
} else if ( str . equals ( " total_max_pwr_cap " ) ) {
return QueryType . TOTAL_MAX_PWR_CAP ;
} else if ( str . equals ( " total_avg_pwr_cap " ) ) {
return QueryType . TOTAL_AVG_PWR_CAP ;
} else if ( str . equals ( " total_min_pwr " ) ) {
return QueryType . TOTAL_MIN_PWR ;
} else if ( str . equals ( " min_avg_pwr " ) ) {
return QueryType . MIN_AVG_PWR ;
} else if ( str . equals ( " max_inlet_temp " ) ) {
return QueryType . MAX_INLET_TEMP ;
} else if ( str . equals ( " avg_inlet_temp " ) ) {
return QueryType . AVG_INLET_TEMP ;
} else if ( str . equals ( " min_inlet_temp " ) ) {
return QueryType . MIN_INLET_TEMP ;
} else if ( str . equals ( " ins_pwr " ) ) {
return QueryType . INS_PWR ;
}
return null ;
}
private static MetricType strToMetricType ( String str ) {
if ( str . equals ( " mnged_nodes_energy " ) ) {
return MetricType . MNGED_NODES_ENERGY ;
} else if ( str . equals ( " mnged_nodes_energy_bill " ) ) {
return MetricType . MNGED_NODES_ENERGY_BILL ;
} else if ( str . equals ( " it_eqpmnt_energy " ) ) {
return MetricType . IT_EQPMNT_ENERGY ;
} else if ( str . equals ( " it_eqpmnt_energy_bill " ) ) {
return MetricType . IT_EQPMNT_ENERGY_BILL ;
} else if ( str . equals ( " calc_cooling_energy " ) ) {
return MetricType . CALC_COOLING_ENERGY ;
} else if ( str . equals ( " calc_cooling_energy_bill " ) ) {
return MetricType . CALC_COOLING_ENERGY_BILL ;
} else if ( str . equals ( " mnged_nodes_pwr " ) ) {
return MetricType . MNGED_NODES_PWR ;
} else if ( str . equals ( " it_eqpmnt_pwr " ) ) {
return MetricType . IT_EQPMNT_PWR ;
} else if ( str . equals ( " calc_cooling_pwr " ) ) {
return MetricType . CALC_COOLING_PWR ;
} else if ( str . equals ( " avg_pwr_per_dimension " ) ) {
return MetricType . AVG_PWR_PER_DIMENSION ;
} else if ( str . equals ( " derated_pwr " ) ) {
return MetricType . DERATED_PWR ;
} else if ( str . equals ( " inlet_temperature_span " ) ) {
return MetricType . INLET_TEMPERATURE_SPAN ;
}
return null ;
}
public static void printUsage ( ) {
System . out . print ( " \ n \ n Usage: DcmPlugin --server <server> --port <port> --action <action> [--value <value> and other values or option depending on action] \ n \ n " ) ;
}
public static XMLGregorianCalendar getEndDate ( ) {
try {
GregorianCalendar gcal = new GregorianCalendar ( ) ;
return DatatypeFactory . newInstance ( ) . newXMLGregorianCalendar ( gcal ) ;
} catch ( DatatypeConfigurationException e ) {
return null ;
}
}
public static XMLGregorianCalendar getStartDate ( int interval ) {
try {
GregorianCalendar gcal = new GregorianCalendar ( ) ;
//Ge time in milliseconds
long time = gcal . getTimeInMillis ( ) ;
//Convert time to seconds
time = time / 1000 ;
//Substract interval
time = time - interval ;
//Convert to milliseconds
time = time * 1000 ;
//Set calendar to real time
gcal . setTimeInMillis ( time ) ;
XMLGregorianCalendar auxDate = DatatypeFactory . newInstance ( ) . newXMLGregorianCalendar ( gcal ) ;
return auxDate ;
} catch ( DatatypeConfigurationException e ) {
return null ;
}
}
/ * *
* @param args
* /
public static void main ( String [ ] args ) {
while ( retry ) {
retry = false ;
retries + + ;
try {
//Check arguments
if ( args . length < 6 ) {
printUsage ( ) ;
System . exit ( - 1 ) ;
}
String server = getParam ( " server " , args ) ;
String port = getParam ( " port " , args ) ;
String action = getParam ( " action " , args ) ;
String value = getParam ( " value " , args ) ;
url = new URL ( " http:// " + server + " : " + port + " /DCMWsdl/dcm.wsdl " ) ;
Dcm_Service dcmService = new Dcm_Service ( url , qName ) ;
dcm = dcmService . getDcmPort ( ) ;
//Execute actions
if ( action . equals ( " resume_monitoring " ) ) {
dcm . setCollectionState ( true ) ;
} else if ( action . equals ( " suspend_monitoring " ) ) {
dcm . setCollectionState ( false ) ;
} else if ( action . equals ( " status_monitoring " ) ) {
if ( dcm . getCollectionState ( ) ) {
result = " 1 " ;
} else {
result = " 0 " ;
}
} else if ( action . equals ( " set_power_sampling " ) ) {
dcm . setGlobalProperty ( GlobalProperty . NODE_POWER_SAMPLING_FREQUENCY , value ) ;
} else if ( action . equals ( " get_power_sampling " ) ) {
result = dcm . getGlobalProperty ( GlobalProperty . NODE_POWER_SAMPLING_FREQUENCY ) ;
} else if ( action . equals ( " set_power_granularity " ) ) {
dcm . setGlobalProperty ( GlobalProperty . NODE_POWER_MEASUREMENT_GRANULARITY , value ) ;
} else if ( action . equals ( " get_power_granularity " ) ) {
result = dcm . getGlobalProperty ( GlobalProperty . NODE_POWER_MEASUREMENT_GRANULARITY ) ;
} else if ( action . equals ( " set_thermal_sampling " ) ) {
dcm . setGlobalProperty ( GlobalProperty . NODE_THERMAL_SAMPLING_FREQUENCY , value ) ;
} else if ( action . equals ( " get_thermal_sampling " ) ) {
result = dcm . getGlobalProperty ( GlobalProperty . NODE_THERMAL_SAMPLING_FREQUENCY ) ;
} else if ( action . equals ( " set_thermal_granularity " ) ) {
dcm . setGlobalProperty ( GlobalProperty . NODE_THERMAL_MEASUREMENT_GRANULARITY , value ) ;
} else if ( action . equals ( " get_thermal_granularity " ) ) {
result = dcm . getGlobalProperty ( GlobalProperty . NODE_THERMAL_MEASUREMENT_GRANULARITY ) ;
} else if ( action . equals ( " set_cooling_multiplier " ) ) {
dcm . setGlobalProperty ( GlobalProperty . COOLING_MULT , value ) ;
} else if ( action . equals ( " get_cooling_multiplier " ) ) {
result = dcm . getGlobalProperty ( GlobalProperty . COOLING_MULT ) ;
} else if ( action . equals ( " set_power_cost " ) ) {
dcm . setGlobalProperty ( GlobalProperty . COST_PER_KW_HR , value ) ;
} else if ( action . equals ( " get_power_cost " ) ) {
result = dcm . getGlobalProperty ( GlobalProperty . COST_PER_KW_HR ) ;
} else if ( action . equals ( " add_entity " ) ) {
Property entityType = new Property ( ) ;
entityType . setName ( EntityProperty . ENTITY_TYPE ) ;
entityType . setValue ( getParam ( " type " , args ) ) ;
Property address = new Property ( ) ;
address . setName ( EntityProperty . BMC_ADDRESS ) ;
address . setValue ( getParam ( " address " , args ) ) ;
Property name = new Property ( ) ;
name . setName ( EntityProperty . NAME ) ;
name . setValue ( getParam ( " value " , args ) ) ;
Property deratedPower = new Property ( ) ;
deratedPower . setName ( EntityProperty . DERATED_PWR ) ;
deratedPower . setValue ( getParam ( " derated_power " , args ) ) ;
Property connectorName = new Property ( ) ;
connectorName . setName ( EntityProperty . CONNECTOR_NAME ) ;
connectorName . setValue ( getParam ( " connector " , args ) ) ;
Property bmcUser = new Property ( ) ;
bmcUser . setName ( EntityProperty . BMC_USER ) ;
bmcUser . setValue ( getParam ( " bmc_user " , args ) ) ;
Property bmcPass = new Property ( ) ;
bmcPass . setName ( EntityProperty . BMC_PASSWORD ) ;
bmcPass . setValue ( getParam ( " bmc_pass " , args ) ) ;
List < Property > properties = new ArrayList < Property > ( ) ;
properties . add ( entityType ) ;
properties . add ( address ) ;
properties . add ( name ) ;
properties . add ( deratedPower ) ;
properties . add ( connectorName ) ;
properties . add ( bmcUser ) ;
properties . add ( bmcPass ) ;
int res = dcm . addEntity ( EntityType . NODE , properties , true ) ;
System . out . print ( res ) ;
} else if ( action . equals ( " connector_list " ) ) {
List < ConnectorInfo > connectorList = dcm . getConnectorList ( ) ;
Iterator iter = connectorList . iterator ( ) ;
result = " " ;
while ( iter . hasNext ( ) ) {
ConnectorInfo connector = ( ConnectorInfo ) iter . next ( ) ;
String name = connector . getDisplayName ( ) ;
String uname = connector . getUname ( ) ;
result = result + name + " : " + uname + " | " ;
}
//Delete last "|"
int lastIdx = result . length ( ) - 1 ;
result = result . substring ( 0 , lastIdx ) ;
} else if ( action . equals ( " entity_properties " ) ) {
String entId = getParam ( " entity_id " , args ) ;
List < Property > properties = dcm . getEntityProperties ( Integer . parseInt ( entId ) ) ;
Iterator iter = properties . iterator ( ) ;
result = " " ;
while ( iter . hasNext ( ) ) {
Property property = ( Property ) iter . next ( ) ;
EntityProperty name = property . getName ( ) ;
String val = property . getValue ( ) ;
result = result + name + " : " + val + " | " ;
}
//Delete last "|"
int lastIdx = result . length ( ) - 1 ;
result = result . substring ( 0 , lastIdx ) ;
} else if ( action . equals ( " delete_entity " ) ) {
String entId = getParam ( " entity_id " , args ) ;
dcm . removeEntity ( Integer . parseInt ( entId ) , true ) ;
System . out . println ( 1 ) ;
} else if ( action . equals ( " update_entity " ) ) {
Property address = new Property ( ) ;
address . setName ( EntityProperty . BMC_ADDRESS ) ;
address . setValue ( getParam ( " address " , args ) ) ;
Property name = new Property ( ) ;
name . setName ( EntityProperty . NAME ) ;
name . setValue ( getParam ( " value " , args ) ) ;
Property deratedPower = new Property ( ) ;
deratedPower . setName ( EntityProperty . DERATED_PWR ) ;
deratedPower . setValue ( getParam ( " derated_power " , args ) ) ;
List < Property > properties = new ArrayList < Property > ( ) ;
properties . add ( address ) ;
properties . add ( name ) ;
properties . add ( deratedPower ) ;
String entId = getParam ( " entity_id " , args ) ;
dcm . setEntityProperties ( Integer . parseInt ( entId ) , properties , false ) ;
System . out . print ( 1 ) ;
} else if ( action . equals ( " query_data " ) ) {
String entId = getParam ( " entity_id " , args ) ;
QueryType queryType = strToQueryType ( getParam ( " value " , args ) ) ;
XMLGregorianCalendar startDate = getStartDate ( 300 ) ;
XMLGregorianCalendar endDate = getEndDate ( ) ;
EnumerationRawData query = dcm . dumpMeasurementData ( Integer . parseInt ( entId ) , queryType , startDate , endDate ) ;
List < RawPtData > queryData = query . getQueryData ( ) ;
Iterator iter = queryData . iterator ( ) ;
//Calculate an average
int numberItems = 0 ;
int accValue = 0 ;
while ( iter . hasNext ( ) ) {
RawPtData data = ( RawPtData ) iter . next ( ) ;
accValue = accValue + data . getValue ( ) ;
numberItems + + ;
}
int avg = accValue / numberItems ;
result = String . valueOf ( avg ) ;
} else if ( action . equals ( " metric_data " ) ) {
String entId = getParam ( " entity_id " , args ) ;
MetricType metricType = strToMetricType ( getParam ( " value " , args ) ) ;
XMLGregorianCalendar startDate = getStartDate ( 360 ) ;
XMLGregorianCalendar endDate = getEndDate ( ) ;
List < AggregationPeriod > aggList = dcm . getMetricAggregationPeriodList ( startDate , endDate , metricType ) ;
Iterator aggIter = aggList . iterator ( ) ;
int max = 0 ;
while ( aggIter . hasNext ( ) ) {
AggregationPeriod aggData = ( AggregationPeriod ) aggIter . next ( ) ;
if ( aggData . getValue ( ) > max ) {
max = aggData . getValue ( ) ;
startDate = aggData . getStart ( ) ;
endDate = aggData . getEnd ( ) ;
}
}
EnumerationData metrics = dcm . getMetricData ( Integer . parseInt ( entId ) , metricType , AggregationLevel . SELF , startDate , endDate , - 1 ) ;
List < PtData > metricsData = metrics . getQueryData ( ) ;
Iterator iter = metricsData . iterator ( ) ;
//Calculate an average
int numberItems = 0 ;
int accValue = 0 ;
while ( iter . hasNext ( ) ) {
PtData data = ( PtData ) iter . next ( ) ;
accValue = accValue + data . getValue ( ) ;
numberItems + + ;
}
int avg = accValue / numberItems ;
result = String . valueOf ( avg ) ;
}
} catch ( Exception_Exception e ) {
System . out . println ( " Web Service Exception: " ) ;
System . out . println ( e ) ;
} catch ( java . lang . Exception e2 ) {
//Only retry if exception is different of MalformedURLException
if ( ! ( e2 instanceof MalformedURLException ) ) {
//Only do MAX_RETRIES
if ( retries < MAX_RETRIES ) {
retry = true ;
try {
//Sleep 1 seconds
Thread . sleep ( 1000 ) ;
} catch ( InterruptedException ie ) {
//TODO InterruptedException handler
}
} else {
System . out . println ( " Max number of retries reached: Timeout error " ) ;
}
}
} finally {
if ( ! result . equals ( " " ) ) {
System . out . print ( result ) ;
}
}
}
}
}