From ed296aa7e0f8a825c998d3087189b5cf84bfe994 Mon Sep 17 00:00:00 2001 From: gscalamera <graziano.scalamera@elettra.eu> Date: Thu, 14 Sep 2017 10:31:59 +0200 Subject: [PATCH] GetAlarmInfo: formatted timestamp and quality from value to label --- src/AlarmHandler.cpp | 38 +++++++++++++++++++++++++------------- src/formula_grammar.h | 18 +++++++++++++----- 2 files changed, 38 insertions(+), 18 deletions(-) diff --git a/src/AlarmHandler.cpp b/src/AlarmHandler.cpp index 9487257..dfe1bb6 100644 --- a/src/AlarmHandler.cpp +++ b/src/AlarmHandler.cpp @@ -3083,15 +3083,17 @@ Tango::DevVarStringArray *AlarmHandler::get_alarm_info(const Tango::DevVarString ostringstream tmp_qual; - /*size_t siz = formula_grammar.attr_quality.size(); - if((it->second.quality) >= 0 && (it->second.quality) < siz) - tmp_qual << formula_grammar.attr_quality[it->second.quality]; - */ - tmp_qual << it->second.quality; - info.insert(make_pair(QUALITY_KEY,tmp_qual.str())); //TODO: enum label ATTR_VALID, ... - complete.push_back(KEY(QUALITY_KEY)+tmp_qual.str());//TODO: enum label ATTR_VALID, ... + try + { + tmp_qual << quality_labels.at(it->second.quality); + } catch(std::out_of_range& ex) + { + tmp_qual << it->second.quality; + } + info.insert(make_pair(QUALITY_KEY,tmp_qual.str())); + complete.push_back(KEY(QUALITY_KEY)+tmp_qual.str()); ostringstream tmp; -#if 0 +//#if 0 tmp.str(""); tmp << (it->second.enabled ? "1" : "0"); info.insert(make_pair(ENABLED_KEY,tmp.str())); //TODO: redundant, information already in attr_value @@ -3100,9 +3102,11 @@ Tango::DevVarStringArray *AlarmHandler::get_alarm_info(const Tango::DevVarString tmp << (it->second.shelved ? "1" : "0"); info.insert(make_pair(SHELVED_KEY,tmp.str())); //TODO: redundant, information already in attr_value complete.push_back(KEY(SHELVED_KEY)+tmp.str()); //TODO: redundant, information already in attr_value - info.insert(make_pair(ACKNOWLEDGED_KEY,it->second.ack)); //TODO: redundant, information already in attr_value - complete.push_back(KEY(ACKNOWLEDGED_KEY)+it->second.ack); //TODO: redundant, information already in attr_value -#endif + tmp.str(""); + tmp << ((it->second.ack == "ACK") ? "1" : "0"); + info.insert(make_pair(ACKNOWLEDGED_KEY,tmp.str())); //TODO: redundant, information already in attr_value + complete.push_back(KEY(ACKNOWLEDGED_KEY)+tmp.str()); //TODO: redundant, information already in attr_value +//#endif tmp.str(""); tmp << (it->second.is_new ? "1" : "0"); info.insert(make_pair(AUDIBLE_KEY,tmp.str())); @@ -5005,18 +5009,26 @@ void AlarmHandler::prepare_alarm_attr() } } + tm time_tm; + time_t time_sec= ai->second.ts.tv_sec; + //gmtime_r(&time_sec,&time_tm); //-> UTC + localtime_r(&time_sec,&time_tm); + char time_buf[64]; + strftime(time_buf, sizeof(time_buf), "%Y-%m-%d %H:%M:%S", &time_tm); #ifndef ALM_SUM_STR alm_summary << KEY(VALUE_KEY) << almstate << SEP; //TODO: string or enum value? alm_summary << KEY(LEVEL_KEY) << ai->second.lev << SEP; - alm_summary << KEY(ALARM_TIME_KEY) << ai->second.ts.tv_sec << "." << ai->second.ts.tv_usec << SEP; + alm_summary << KEY(ALARM_TIME_KEY) << time_buf << "." << ai->second.ts.tv_usec << SEP; + alm_summary << KEY(FORMULA_KEY) << ai->second.formula << SEP; alm_summary << KEY(MESSAGE_KEY) << ai->second.msg; //TODO: escape ';' #else alm_summary += string(KEY(VALUE_KEY)) + almstate + SEP; //TODO: string or enum value? alm_summary += KEY(LEVEL_KEY) + ai->second.lev + SEP; stringstream sval; - sval << ai->second.ts.tv_sec << "." << ai->second.ts.tv_usec; + sval << time_buf << "." << ai->second.ts.tv_usec; alm_summary += KEY(ALARM_TIME_KEY) + sval.str() + SEP; + alm_summary += KEY(FORMULA_KEY) + ai->second.formula + SEP; alm_summary += KEY(MESSAGE_KEY) + ai->second.msg; //TODO: escape ';' #endif diff --git a/src/formula_grammar.h b/src/formula_grammar.h index a569490..2dc2940 100644 --- a/src/formula_grammar.h +++ b/src/formula_grammar.h @@ -92,6 +92,8 @@ enum _AlarmStateEnum { _ERROR } ; +static vector<string> quality_labels; + struct formula_grammar : public grammar<formula_grammar> { @@ -154,11 +156,17 @@ struct formula_grammar : public grammar<formula_grammar> tango_states.add("DISABLE", (unsigned int)Tango::DISABLE); tango_states.add("UNKNOWN", (unsigned int)Tango::UNKNOWN); - attr_quality.add("ATTR_VALID", (unsigned int)Tango::ATTR_VALID); - attr_quality.add("ATTR_INVALID", (unsigned int)Tango::ATTR_INVALID); - attr_quality.add("ATTR_ALARM", (unsigned int)Tango::ATTR_ALARM); - attr_quality.add("ATTR_CHANGING", (unsigned int)Tango::ATTR_CHANGING); - attr_quality.add("ATTR_WARNING", (unsigned int)Tango::ATTR_WARNING); + quality_labels.push_back("ATTR_VALID"); + attr_quality.add(quality_labels.back().c_str(), (unsigned int)Tango::ATTR_VALID); + quality_labels.push_back("ATTR_INVALID"); + attr_quality.add(quality_labels.back().c_str(), (unsigned int)Tango::ATTR_INVALID); + quality_labels.push_back("ATTR_ALARM"); + attr_quality.add(quality_labels.back().c_str(), (unsigned int)Tango::ATTR_ALARM); + quality_labels.push_back("ATTR_CHANGING"); + attr_quality.add(quality_labels.back().c_str(), (unsigned int)Tango::ATTR_CHANGING); + quality_labels.push_back("ATTR_WARNING"); + attr_quality.add(quality_labels.back().c_str(), (unsigned int)Tango::ATTR_WARNING); + alarm_enum_states.add("NORM", (unsigned int)_NORM); alarm_enum_states.add("UNACK", (unsigned int)_UNACK); -- GitLab