Remove references to ceilometer in maintenance
Maintence no longer has any plan to interface with ceilometer so this update removes all such references. In addition it removes 3 obsoleted files that also make reference to ceilometer. Change-Id: Iae0738946ff241acde44720024d25f8c38f65433 Story:2004764 Task:30666 Signed-off-by: Eric MacDonald <eric.macdonald@windriver.com>
This commit is contained in:
parent
b6e26db632
commit
a0ab8947ab
|
@ -72,9 +72,6 @@ typedef struct
|
|||
int sysinv_api_port ; /**< =6385 */
|
||||
char* sysinv_api_bind_ip ; /**< =<local floating IP> */
|
||||
|
||||
char* ceilometer_url ; /**< ceilometer sensor sample database url */
|
||||
int ceilometer_port ; /**< ceilometer REST API port number */
|
||||
|
||||
char* barbican_api_host ; /**< Barbican REST API host IP address */
|
||||
int barbican_api_port ; /**< Barbican REST API port number */
|
||||
|
||||
|
|
|
@ -1,182 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2015 Wind River Systems, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Wind River CGTS Platform PostgreSQL Database Access module for maintenance.
|
||||
*
|
||||
* pqdmClass member primitive implementation.
|
||||
*
|
||||
* query
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#include "pgdbClass.h"
|
||||
|
||||
#define MAX_SQL_RESPONSE_MAX (4096)
|
||||
#define SENSOR_SAMPLE_TABLE "sample"
|
||||
|
||||
/* DB connection status */
|
||||
#define DB_DISCONNECTED 0
|
||||
#define DB_CONNECTED 1
|
||||
|
||||
pgdbClass::pgdbClass()
|
||||
{
|
||||
pg.uri = NULL;
|
||||
pg.conn = NULL;
|
||||
pg.connected = false ;
|
||||
}
|
||||
|
||||
pgdbClass::~pgdbClass()
|
||||
{
|
||||
if (pg.conn)
|
||||
{
|
||||
PQfinish(pg.conn);
|
||||
}
|
||||
pg.connected = false ;
|
||||
}
|
||||
|
||||
int pgdbClass::connect(const char *uri)
|
||||
{
|
||||
const char *val = NULL;
|
||||
|
||||
/* make a connection to the specified database */
|
||||
this->pg.conn = PQconnectdb(uri);
|
||||
|
||||
/* verify the connection */
|
||||
if ((this->pg.conn == NULL) || (PQstatus(this->pg.conn) != CONNECTION_OK))
|
||||
{
|
||||
elog ("failed to connected to DB: (%s)\n", uri);
|
||||
PQfinish(this->pg.conn);
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
this->pg.connected = true ;
|
||||
this->pg.uri = uri;
|
||||
|
||||
val = get_parameter_status("standard_conforming_strings");
|
||||
ilog ("server standard_conforming_strings parameter: %s\n", val ? val : "unavailable");
|
||||
|
||||
this->pg.equote = (val && (0 == strcmp("off", val)));
|
||||
ilog ("server requires E'' quotes: %s\n", this->pg.equote ? "YES" : "NO");
|
||||
|
||||
this->pg.server_version = PQserverVersion(this->pg.conn);
|
||||
this->pg.protocol = PQprotocolVersion(this->pg.conn);
|
||||
this->pg.encoding = get_parameter_status("client_encoding");
|
||||
|
||||
return PASS ;
|
||||
}
|
||||
|
||||
int pgdbClass::monitor( void )
|
||||
{
|
||||
if (PQstatus(this->pg.conn) != CONNECTION_OK)
|
||||
{
|
||||
elog ("failed connection audit to '%s' (%s)\n", this->pg.uri, PQerrorMessage(this->pg.conn));
|
||||
disconnect();
|
||||
|
||||
/* TODO: make this an FSM, otherwise this will bang away */
|
||||
// return connect(this->pg.uri);
|
||||
return (FAIL);
|
||||
}
|
||||
return PASS ;
|
||||
}
|
||||
|
||||
void pgdbClass::disconnect()
|
||||
{
|
||||
if (this->pg.conn != NULL)
|
||||
{
|
||||
PQfinish(this->pg.conn);
|
||||
}
|
||||
if (this->pg.connected == true )
|
||||
{
|
||||
this->pg.connected = false ;
|
||||
}
|
||||
}
|
||||
|
||||
const char * pgdbClass::get_parameter_status(const char *param)
|
||||
{
|
||||
return PQparameterStatus(this->pg.conn, param);
|
||||
}
|
||||
|
||||
int pgdbClass::cmd(const char *db_cmd)
|
||||
{
|
||||
PGresult *res;
|
||||
int rc = PASS;
|
||||
|
||||
if (monitor() != PASS )
|
||||
{
|
||||
elog ("Failed to reconnect: %s", PQerrorMessage(this->pg.conn));
|
||||
return FAIL ;
|
||||
}
|
||||
res = PQexec(this->pg.conn, db_cmd);
|
||||
if (PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||
{
|
||||
elog ("Request Status: %s\n", PQresStatus(PQresultStatus(res)));
|
||||
elog ("execute Status: %s (%s)\n", db_cmd, PQresultErrorMessage(res));
|
||||
rc = FAIL;
|
||||
}
|
||||
if (rc == PASS )
|
||||
{
|
||||
int row = atoi(PQcmdTuples(res));
|
||||
ilog ("SQL command returned successful: %d rows affected.\n", row); /* dlog */
|
||||
if (row < 1)
|
||||
{
|
||||
rc = FAIL;
|
||||
}
|
||||
}
|
||||
PQclear(res);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
int pgdbUtil_get_version ( void )
|
||||
{
|
||||
int ver = PQlibVersion();
|
||||
ilog ("libpq version: %d\n", ver);
|
||||
return ver ;
|
||||
}
|
||||
|
||||
int pgdbClass::query (const char * db_cmd , mtc_query_type & result)
|
||||
{
|
||||
PGresult *res;
|
||||
int nfields, ntuples, i, j;
|
||||
|
||||
if (monitor() != PASS)
|
||||
{
|
||||
elog ("Failed to reconnect: %s\n", PQerrorMessage(this->pg.conn));
|
||||
return (FAIL) ;
|
||||
}
|
||||
|
||||
res = PQexec( pg.conn, db_cmd);
|
||||
if (PQresultStatus(res) != PGRES_TUPLES_OK)
|
||||
{
|
||||
elog("request status: %s\n", PQresStatus(PQresultStatus(res)));
|
||||
elog("execute status: %s (%s)\n", db_cmd, PQresultErrorMessage(res));
|
||||
PQclear(res);
|
||||
return(FAIL);
|
||||
}
|
||||
|
||||
nfields = PQnfields(res);
|
||||
ntuples = PQntuples(res);
|
||||
ilog ("Cmd: (%s) OK, entries found: (%d)\n", db_cmd, ntuples); /* dlog */
|
||||
|
||||
for (i = 0; i < ntuples; ++i)
|
||||
{
|
||||
mtc_key_value_type key_value ;
|
||||
|
||||
for (j =0; j < nfields; ++j)
|
||||
{
|
||||
char * key = PQfname(res, j);
|
||||
char * value = PQgetvalue(res, i, j);
|
||||
key_value[key] = value;
|
||||
}
|
||||
result.push_back ( key_value );
|
||||
}
|
||||
PQclear(res);
|
||||
return(PASS);
|
||||
}
|
|
@ -1,83 +0,0 @@
|
|||
#ifndef __INCLUDE_PGDBCLASS_H__
|
||||
#define __INCLUDE_PGDBCLASS_H__
|
||||
|
||||
/*
|
||||
* Copyright (c) 2015 Wind River Systems, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Wind River CGTS Platform PostgreSQL Database Access module for maintenance.
|
||||
*
|
||||
* Class, support structs and enums.
|
||||
*
|
||||
* This module is based off the libpq - C Library
|
||||
*
|
||||
* Header File: libpg-fe.h
|
||||
* Library File: libpq
|
||||
*
|
||||
* http://www.postgresql.org/docs/8.3/static/libpq-build.html
|
||||
*
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <stdio.h>
|
||||
#include <list>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
|
||||
// #include <postgresql/libpq-fe.h>
|
||||
#include <libpq-fe.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
#include "nodeBase.h" /* for ... comnmon definitions, emums and structs */
|
||||
#include "nodeUtil.h"
|
||||
#include "nodeTimers.h" /* */
|
||||
#include "daemon_common.h"
|
||||
#include "daemon_option.h"
|
||||
#include "daemon_ini.h"
|
||||
|
||||
|
||||
typedef std::map<std::string,std::string> mtc_key_value_type ; /* key-value pair array */
|
||||
typedef std::vector<mtc_key_value_type> mtc_query_type ; /* dynamic sized array */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
PGconn *conn; /* the postgresql connection */
|
||||
bool connected; /* true = connected ; false = not connected */
|
||||
int equote; /* use E''-style quotes for escaped strings */
|
||||
int protocol; /* protocol version */
|
||||
int server_version; /* server version */
|
||||
const char *encoding; /* client encoding */
|
||||
const char *uri; /* Connection URI */
|
||||
} pgdb_conn_type ; // formerly SFmDBConn
|
||||
|
||||
class pgdbClass
|
||||
{
|
||||
protected:
|
||||
const char * get_parameter_status(const char *param);
|
||||
|
||||
public:
|
||||
pgdbClass();
|
||||
~pgdbClass();
|
||||
|
||||
pgdb_conn_type pg ;
|
||||
|
||||
int connect (const char *uri);
|
||||
void disconnect ();
|
||||
int reconnect ();
|
||||
int monitor ();
|
||||
|
||||
int query (const char *db_cmd , mtc_query_type & result);
|
||||
int cmd (const char *db_cmd);
|
||||
};
|
||||
|
||||
int pgdbUtil_get_version ( void );
|
||||
|
||||
#endif /* __INCLUDE_PGDBCLASS_H__ */
|
|
@ -1,427 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2015 Wind River Systems, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Wind River CGTS Platform PostgreSQL Database Access Utility module.
|
||||
**/
|
||||
|
||||
#include "pgdbClass.h"
|
||||
#include "jsonUtil.h"
|
||||
|
||||
#define CONF_FILE ((const char *)("/etc/ceilometer/ceilometer.conf"))
|
||||
|
||||
/* Cleanup exit handler */
|
||||
void daemon_exit ( void )
|
||||
{
|
||||
exit (0);
|
||||
}
|
||||
|
||||
void daemon_sigchld_hdlr ( void )
|
||||
{
|
||||
dlog("Received SIGCHLD ...\n");
|
||||
}
|
||||
|
||||
|
||||
static daemon_config_type _config ;
|
||||
static opts_type * opts_ptr ;
|
||||
|
||||
|
||||
/* Ceilometer config read */
|
||||
int _config_handler ( void * user,
|
||||
const char * section,
|
||||
const char * name,
|
||||
const char * value)
|
||||
{
|
||||
daemon_config_type* config_ptr = (daemon_config_type*)user;
|
||||
if (MATCH("database", "connection"))
|
||||
{
|
||||
config_ptr->ceilometer_url = strdup(value);
|
||||
if ( config_ptr->ceilometer_url )
|
||||
{
|
||||
ilog ("Ceilometer URL: %s\n", config_ptr->ceilometer_url );
|
||||
}
|
||||
}
|
||||
return (PASS);
|
||||
}
|
||||
|
||||
|
||||
|
||||
daemon_config_type * daemon_get_cfg_ptr (void)
|
||||
{
|
||||
return (&_config);
|
||||
}
|
||||
|
||||
int daemon_configure ( void )
|
||||
{
|
||||
int rc = PASS ;
|
||||
opts_ptr = daemon_get_opts_ptr();
|
||||
|
||||
daemon_files_init ();
|
||||
|
||||
ilog("Config File : %s\n", CONF_FILE );
|
||||
if (ini_parse ( CONF_FILE, _config_handler, &_config ) < 0)
|
||||
{
|
||||
elog("Failed to load '%s'\n", CONF_FILE );
|
||||
}
|
||||
return (rc) ;
|
||||
}
|
||||
|
||||
int daemon_init ( string iface , string nodetype )
|
||||
{
|
||||
UNUSED(iface);
|
||||
UNUSED(nodetype);
|
||||
|
||||
daemon_configure ();
|
||||
|
||||
// get_debug_options ( CONF_FILE, &_config );
|
||||
return (PASS);
|
||||
}
|
||||
|
||||
pgdbClass dbConn ;
|
||||
|
||||
#define EXACT_MATCH (0)
|
||||
#define POSITION_ZERO (0)
|
||||
|
||||
/************************************************************************************
|
||||
*
|
||||
* Ceilometer Database: Sensor Value Correlation
|
||||
*
|
||||
* 1. The METER table lists valid meter_ids
|
||||
* - hardware.ipmi.*
|
||||
*
|
||||
* 2. The RESOURCE table lists all the sensors based on internal id
|
||||
* - hostname-{sensor number-}<sensor name>_<???>
|
||||
* ... nokia-2-temp_psu2_(0x94)
|
||||
* ... controller-1-37-system_board_(0x33)
|
||||
*
|
||||
* 3. The SAMPLE table lists sample data as volume based on specified unit type
|
||||
* - sensor resource lookup
|
||||
* ... SAMPLE:resource_id == RESOURCE:internal_id
|
||||
* - SAMPLE:meter_id is used to know it is a valid meter to monitor
|
||||
* ... METER:id is valid if METER:name has hardware.ipmi in it
|
||||
* ... hardware.ipmi.current
|
||||
*
|
||||
**************************************************************************************/
|
||||
|
||||
/* Valid meter ids */
|
||||
#define PQ_TABLE_INDEX__METER_ID (0)
|
||||
#define PQ_TABLE_INDEX__METER_NAME (1)
|
||||
#define PQ_TABLE_INDEX__METER_TYPE (2)
|
||||
#define PQ_TABLE_INDEX__METER_UNIT (3)
|
||||
|
||||
#define VALID_METER_PREFIX ((const char *)("hardware.ipmi."))
|
||||
typedef struct
|
||||
{
|
||||
int id ;
|
||||
string scope; /* ipmi - VALID_METER_PREFIX */
|
||||
string name ;
|
||||
string unit ;
|
||||
string type ;
|
||||
} hwmon_meter_type ;
|
||||
std::map<int, hwmon_meter_type> global_meter_list ;
|
||||
|
||||
#define PQ_TABLE_INDEX__RESOURCE__INTERNAL_ID (0)
|
||||
#define PQ_TABLE_INDEX__RESOURCE__RESOURCE_ID (1)
|
||||
#define PQ_TABLE_INDEX__RESOURCE__METADATA (2)
|
||||
typedef struct
|
||||
{
|
||||
int id ;
|
||||
string hostname ;
|
||||
string sensorname ;
|
||||
string somevalue ;
|
||||
} hwmon_resource_type ;
|
||||
std::map<int, hwmon_resource_type> global_sensor_list ;
|
||||
std::map<int, hwmon_resource_type> excluded_resource_list ;
|
||||
|
||||
// mtc_key_value_type ipmi_sensor_group
|
||||
void daemon_service_run ( void )
|
||||
{
|
||||
int rc = PASS ;
|
||||
pgdbUtil_get_version ();
|
||||
if ( ! _config.ceilometer_url )
|
||||
{
|
||||
rc = FAIL_NULL_POINTER ;
|
||||
}
|
||||
else
|
||||
{
|
||||
PGresult * pqResult_ptr ;
|
||||
string pqCommand_str;
|
||||
|
||||
ilog ("URI:%s\n", _config.ceilometer_url );
|
||||
|
||||
// check_connection:
|
||||
for ( ; ; )
|
||||
{
|
||||
if ( dbConn.pg.connected == false )
|
||||
{
|
||||
elog ("not connected\n");
|
||||
sleep (2);
|
||||
dbConn.connect ( _config.ceilometer_url );
|
||||
continue ;
|
||||
// goto check_connection ;
|
||||
}
|
||||
else if ( dbConn.monitor() != PASS )
|
||||
{
|
||||
sleep (2);
|
||||
continue ;
|
||||
}
|
||||
global_meter_list.clear();
|
||||
|
||||
// ilog ("max number of meters allowed: %zu\n", global_meter_list.max_size());
|
||||
|
||||
/* PARSE METER - hwmon_get_ipmi_sensor_meters () ; */
|
||||
pqCommand_str = "SELECT * FROM meter" ;
|
||||
pqResult_ptr = PQexec ( dbConn.pg.conn, pqCommand_str.data());
|
||||
|
||||
// +----+-------------------------------------+------------+---------
|
||||
// | id | name | type | unit
|
||||
// +----+-------------------------------------+------------+---------
|
||||
// | 1 | hardware.ipmi.current | gauge | W
|
||||
// | 2 | hardware.ipmi.temperature | gauge | C
|
||||
// | 3 | hardware.ipmi.fan | gauge | percent
|
||||
|
||||
if ( PQresultStatus( pqResult_ptr ) == PGRES_TUPLES_OK)
|
||||
{
|
||||
hwmon_meter_type meter ;
|
||||
meter.scope = VALID_METER_PREFIX ;
|
||||
int rows = PQntuples(pqResult_ptr);
|
||||
for(int i=0; i<rows; i++)
|
||||
{
|
||||
string
|
||||
meter_id = PQgetvalue(pqResult_ptr, i, PQ_TABLE_INDEX__METER_ID );
|
||||
meter.name = PQgetvalue(pqResult_ptr, i, PQ_TABLE_INDEX__METER_NAME);
|
||||
meter.type = PQgetvalue(pqResult_ptr, i, PQ_TABLE_INDEX__METER_TYPE);
|
||||
meter.unit = PQgetvalue(pqResult_ptr, i, PQ_TABLE_INDEX__METER_UNIT);
|
||||
dlog ("%s %s %s %s\n", meter_id.c_str(), meter.name.c_str(), meter.type.c_str(), meter.unit.c_str() );
|
||||
|
||||
/* We care abount hardware IPMI gauges */
|
||||
if ( meter.type.compare("gauge") == EXACT_MATCH )
|
||||
{
|
||||
if ( meter.name.find ( meter.scope, POSITION_ZERO ) == POSITION_ZERO )
|
||||
{
|
||||
/* Ok, this is a valid group ; extract the group name and id */
|
||||
meter.name = meter.name.substr(meter.scope.size(), meter.scope.size()+meter.name.size());
|
||||
if ( ! (meter_id.size() > sizeof(int)) )
|
||||
{
|
||||
meter.id = atoi(meter_id.data());
|
||||
global_meter_list.insert (std::make_pair(meter.id, meter ));
|
||||
dlog3 ("ipmi sensor group %d '%s' (%s:%s)\n",
|
||||
meter.id, meter.name.c_str(),
|
||||
meter.type.c_str(), meter.unit.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
} /* end 'meters rows parse' for loop */
|
||||
|
||||
if ( global_meter_list.size() )
|
||||
{
|
||||
// ************** Testing *********************
|
||||
#define WANT_QUERY_AUTO_ITERATOR_TEST
|
||||
|
||||
#ifdef WANT_QUERY_DECLARED_ITERATOR_TEST
|
||||
/* TEST: Query Meters using declared iterator */
|
||||
std::map<int, hwmon_meter_type>::const_iterator global_meter_list_iter = global_meter_list.begin();
|
||||
while ( global_meter_list_iter != global_meter_list.end() )
|
||||
{
|
||||
ilog ("ipmi sensor group %d '%s' (%s:%s)\n",
|
||||
global_meter_list_iter->second.id,
|
||||
global_meter_list_iter->second.name.c_str(),
|
||||
global_meter_list_iter->second.type.c_str(),
|
||||
global_meter_list_iter->second.unit.c_str());
|
||||
|
||||
++global_meter_list_iter ;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WANT_QUERY_AUTO_ITERATOR_TEST
|
||||
/* TEST: Loop Over meter List using C++11 auto iterator */
|
||||
for ( auto _iter = global_meter_list.begin() ; _iter != global_meter_list.end() ; _iter++ )
|
||||
{
|
||||
dlog ("ipmi sensor group %d '%s' (%s:%s)\n",
|
||||
_iter->second.id,
|
||||
_iter->second.name.c_str(),
|
||||
_iter->second.type.c_str(),
|
||||
_iter->second.unit.c_str());
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WANT_FIND_TEST
|
||||
/* TEST: Find meters test */
|
||||
for ( int i = 0 ; i < 1000 ; i++ )
|
||||
{
|
||||
global_meter_list_iter = global_meter_list.find(i);
|
||||
if ( global_meter_list_iter != global_meter_list.end() )
|
||||
{
|
||||
ilog ("ipmi sensor group query test - %d:%d '%s' (%s:%s)\n",
|
||||
i,
|
||||
global_meter_list_iter->second.id,
|
||||
global_meter_list_iter->second.name.c_str(),
|
||||
global_meter_list_iter->second.type.c_str(),
|
||||
global_meter_list_iter->second.unit.c_str());
|
||||
}
|
||||
}
|
||||
#endif
|
||||
ilog ( "%zu sensor groups total\n", global_meter_list.size() );
|
||||
|
||||
|
||||
/* PARSE RESOURCE - hwmon_get_ipmi_sensor_list () ; */
|
||||
pqCommand_str = "SELECT internal_id,resource_id,resource_metadata FROM resource" ;
|
||||
pqResult_ptr = PQexec ( dbConn.pg.conn, pqCommand_str.data());
|
||||
|
||||
// +-------------+--------------------------------------+-----------------------------+
|
||||
// | internal_id | resource_id | resource_metadata
|
||||
// | 1 | controller-0-power_meter_(0x40) | {"node": "controller-0"}
|
||||
// | 2 | controller-0-26-ilo_zone_(0x26) | {"node": "controller-0"}
|
||||
// | 3 | controller-0-fan_2_(0x7) | {"node": "controller-0"}
|
||||
|
||||
if ( PQresultStatus( pqResult_ptr ) == PGRES_TUPLES_OK)
|
||||
{
|
||||
hwmon_resource_type resource ;
|
||||
|
||||
int rows = PQntuples(pqResult_ptr);
|
||||
for(int i=0; i<rows; i++)
|
||||
{
|
||||
bool added = false ;
|
||||
string hostname ;
|
||||
string internal_id = PQgetvalue(pqResult_ptr, i, PQ_TABLE_INDEX__RESOURCE__INTERNAL_ID);
|
||||
string resource_id = PQgetvalue(pqResult_ptr, i, PQ_TABLE_INDEX__RESOURCE__RESOURCE_ID);
|
||||
string metadata = PQgetvalue(pqResult_ptr, i, PQ_TABLE_INDEX__RESOURCE__METADATA );
|
||||
dlog ("%s %s %s\n", internal_id.c_str(), resource_id.c_str(), metadata.c_str());
|
||||
|
||||
/* get map key as int version of internal_id */
|
||||
if ( ! (internal_id.size() > sizeof(int)) )
|
||||
{
|
||||
resource.id = atoi(internal_id.data());
|
||||
}
|
||||
else
|
||||
{
|
||||
elog ("failed to convert internal_id:%s to integer ; excluded '%s'\n", internal_id.c_str(), resource_id.c_str());
|
||||
continue ;
|
||||
}
|
||||
|
||||
/* Add those that have a valid hostname as metadata key:value pair { node: "<hostname>" } */
|
||||
|
||||
if ( metadata.size() && ( jsonUtil_get_key_val ( (char*)metadata.data(), "node", hostname ) == PASS ))
|
||||
{
|
||||
resource.hostname = hostname ;
|
||||
if ( resource_id.find (hostname, POSITION_ZERO ) == POSITION_ZERO )
|
||||
{
|
||||
/* Get somevalue */
|
||||
resource.somevalue.clear();
|
||||
resource.sensorname = resource_id.substr ( hostname.length());
|
||||
size_t index = resource.sensorname.find ("_(0x");
|
||||
if ( index != std::string::npos )
|
||||
{
|
||||
resource.somevalue = resource.sensorname.substr (index+1);
|
||||
}
|
||||
resource.sensorname = resource_id.substr ( hostname.length()+1, index-1 );
|
||||
global_sensor_list.insert (std::make_pair(resource.id, resource ));
|
||||
added = true ;
|
||||
dlog ("added - %s %s\n", hostname.c_str(), resource.sensorname.c_str());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
elog ("no valid metadata node:hostname key value pair (%s) ; excluded %s\n", metadata.c_str(), resource_id.c_str() );
|
||||
}
|
||||
|
||||
if ( added == false )
|
||||
{
|
||||
resource.hostname = "none" ;
|
||||
resource.sensorname = resource_id ;
|
||||
resource.somevalue = metadata ;
|
||||
excluded_resource_list.insert(std::make_pair(resource.id, resource ));
|
||||
}
|
||||
} /* end 'resource rows parse' for loop */
|
||||
}
|
||||
if ( global_sensor_list.size() )
|
||||
{
|
||||
/* Loop over meter List using C++11 auto iterator */
|
||||
for ( auto _iter = global_sensor_list.begin() ; _iter != global_sensor_list.end() ; _iter++ )
|
||||
{
|
||||
dlog ("%s %d sensor '%s' %s\n",
|
||||
_iter->second.hostname.c_str(),
|
||||
_iter->second.id,
|
||||
_iter->second.sensorname.c_str(),
|
||||
_iter->second.somevalue.c_str());
|
||||
}
|
||||
}
|
||||
#ifdef WANT_DISPLAY_EXCLUDED_METERS_LIST
|
||||
if ( excluded_resource_list.size() )
|
||||
{
|
||||
/* Loop over meter List using C++11 auto iterator */
|
||||
for ( auto _iter = excluded_resource_list.begin() ; _iter != excluded_resource_list.end() ; _iter++ )
|
||||
{
|
||||
ilog ("excluded %d '%s' (%s)\n",
|
||||
_iter->second.id,
|
||||
_iter->second.sensorname.c_str(),
|
||||
_iter->second.somevalue.c_str());
|
||||
}
|
||||
}
|
||||
#endif
|
||||
ilog ("%zu sensors ; system wide and %zu meter resources excluded\n",
|
||||
global_sensor_list.size(),
|
||||
excluded_resource_list.size());
|
||||
|
||||
/* SELECT id,volume,timestamp,meter_id,resource_id FROM sample WHERE timestamp >= '2016-11-22 21:57:45' AND resource_id = 149; */
|
||||
/* PARSE RESOURCE - hwmon_get_ipmi_sensor_list () ;
|
||||
pqCommand_str = "SELECT internal_id,resource_id,resource_metadata FROM resource" ;
|
||||
pqResult_ptr = PQexec ( dbConn.pg.conn, pqCommand_str.data());
|
||||
*/
|
||||
// +-------------+--------------------------------------+-----------------------------+
|
||||
// | internal_id | resource_id | resource_metadata
|
||||
// | 1 | controller-0-power_meter_(0x40) | {"node": "controller-0"}
|
||||
// | 2 | controller-0-26-ilo_zone_(0x26) | {"node": "controller-0"}
|
||||
// | 3 | controller-0-fan_2_(0x7) | {"node": "controller-0"}
|
||||
|
||||
//if ( PQresultStatus( pqResult_ptr ) == PGRES_TUPLES_OK)
|
||||
//{
|
||||
|
||||
// Query all samples based on the last <audit period>
|
||||
// - keep track of sample ID numbers to discard already managed samples
|
||||
// for each host
|
||||
// for each sensor
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
elog ("no data retrieved for command '%s'\n", pqCommand_str.c_str());
|
||||
}
|
||||
|
||||
PQclear (pqResult_ptr);
|
||||
|
||||
/* TODO: Group these 2 commands into an _fini proc */
|
||||
//PQfinish(dbConn.pg.conn);
|
||||
//dbConn.pg.conn = NULL ;
|
||||
}
|
||||
}
|
||||
}
|
||||
ilog ("RC:%d\n", rc );
|
||||
}
|
||||
|
||||
/* STUBS */
|
||||
|
||||
/* Push daemon state to log file */
|
||||
void daemon_dump_info ( void )
|
||||
{
|
||||
daemon_dump_membuf_banner ();
|
||||
daemon_dump_membuf();
|
||||
}
|
||||
|
||||
|
||||
int daemon_run_testhead ( void )
|
||||
{
|
||||
return PASS ;
|
||||
}
|
||||
|
||||
|
||||
const char * dummy = "empty" ;
|
||||
const char * daemon_stream_info ( void )
|
||||
{
|
||||
return (dummy) ;
|
||||
}
|
|
@ -858,10 +858,5 @@ int keystone_config_handler ( void * user,
|
|||
config_ptr->keystone_region_name = strdup(value);
|
||||
ilog("Region Name : %s\n", config_ptr->keystone_region_name );
|
||||
}
|
||||
else if (MATCH("agent", "ceilometer_port"))
|
||||
{
|
||||
config_ptr->ceilometer_port = atoi(value);
|
||||
dlog("Ceilometer Port : %d\n", config_ptr->ceilometer_port );
|
||||
}
|
||||
return (PASS);
|
||||
}
|
||||
|
|
|
@ -36,10 +36,6 @@
|
|||
#include "hwmonSensor.h" /* for ... hwmonSensor_print */
|
||||
#include "hwmonAlarm.h" /* for ... hwmonAlarm */
|
||||
|
||||
//ceilometer/ceilometer.conf port=8777
|
||||
//ceilometer/ceilometer.conf host=192.168.204.2
|
||||
|
||||
|
||||
static event_type hwmon_event ;
|
||||
|
||||
|
||||
|
|
|
@ -47,7 +47,6 @@ typedef struct
|
|||
* 1. the HTTP Client API for
|
||||
* - configuring sysinv with sensor data records as well as modifying
|
||||
* and querying those records.
|
||||
* - pushing sensor samples to ceilometer
|
||||
*
|
||||
* 2. the HTTP Server handler that services sysinv sensor configuration
|
||||
* change notifications.
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
# controller-0:~# /home/wrsroot/pmon-test.sh restart
|
||||
#
|
||||
# acpid restart PASSED [651]:[19095]
|
||||
# ceilometer-polling restart PASSED [13844]:[22519]
|
||||
# fsmond restart PASSED [8719]:[26343]
|
||||
# guestServer restart PASSED [8710]:[29108]
|
||||
# hbsClient restart PASSED [8729]:[31248]
|
||||
|
|
Loading…
Reference in New Issue