Currently job artifacts in CI/CD pipelines on LRZ GitLab never expire. Starting from Wed 26.1.2022 the default expiration time will be 30 days (GitLab default). Currently existing artifacts in already completed jobs will not be affected by the change. The latest artifacts for all jobs in the latest successful pipelines will be kept. More information: https://gitlab.lrz.de/help/user/admin_area/settings/continuous_integration.html#default-artifacts-expiration

Commit dfe95445 authored by Michael Ott's avatar Michael Ott
Browse files

Remove getSensorPattern() and getSensorListForPattern() functions

parent 4e33a5ff
......@@ -233,40 +233,6 @@ public:
*/
SCError isVirtual(bool& isVirtual, std::string publicName);
/**
* @brief Get the SensorID pattern for a given public sensor.
*
* @param pattern Reference to a string which holds the result.
* @param publicName Name of the sensor whose information should be retrieved.
* @return See SCError.
*/
SCError getSensorPattern(std::string& pattern, std::string publicName);
/**
* @brief Get the list of SensorIDs (available in the database) that match a given pattern.
*
* @param sensorIDs Reference to a list of SensorID which holds the result.
* @param pattern The SensorID pattern which should be matched by the resulting sensors.
* @return See SCError.
*/
SCError getSensorListForPattern(std::list<SensorId>& sensorIds, std::string pattern);
/**
* @brief Get the list of SensorIDs (available in the database) that match a given pattern - optimized version.
*
* @param pattern Reference to a string which holds the result.
* @param publicName Name of the sensor whose information should be retrieved.
* @param start Start of the time window
* @param end End of the time window
* @return See SCError.
*
* @details Since seeking the list of SensorIDs that match a given SensorID pattern is often
* used before querying the database in a given time window, this optimized version
* will be helpful in that it only returns SensorIDs that provide data in the given
* time window.
*/
SCError getSensorListForPattern(std::list<SensorId>& sensorIds, std::string pattern, TimeStamp start, TimeStamp end);
/**
* @brief Set the scaling factor for a public sensor. (FIXME: Scaling factors system is not in use!)
*
......
......@@ -72,10 +72,6 @@ public:
SCError isVirtual(bool& isVirtual, std::string publicName);
SCError getSensorPattern(std::string& pattern, std::string publicName);
SCError getSensorListForPattern(std::list<SensorId>& sensorIds, std::string pattern);
SCError getSensorListForPattern(std::list<SensorId>& sensorIds, std::string pattern, TimeStamp start, TimeStamp end);
SCError setSensorScalingFactor(std::string publicName, double scalingFactor);
SCError setSensorUnit(std::string publicName, std::string unit);
SCError setSensorMask(std::string publicName, uint64_t mask);
......
......@@ -73,28 +73,20 @@ namespace DCDB {
vSen.query(result, start, end);
}
else {
/* Expand the pattern into a list of existing sensors in the time range */
std::list<SensorId> sensorIds;
switch (sensorConfig->getSensorListForPattern(sensorIds, publicSensor.pattern, start, end)) {
case DCDB::SC_OK:
break;
case DCDB::SC_INVALIDPATTERN:
std::cout << "Invalid pattern." << std::endl;
return;
default:
std::cout << "Unknown error." << std::endl;
return;
}
/* Iterate over the expanded list of sensorIds and output the results in CSV format */
/* Iterate over the sensorIds within the query interval and output the results in CSV format */
if(start.getRaw() != end.getRaw()) {
for (std::list<SensorId>::iterator sit = sensorIds.begin(); sit != sensorIds.end(); sit++) {
sensorDataStore.query(result, *sit, start, end, aggregate);
uint16_t wsStart = start.getWeekstamp();
uint16_t wsEnd = end.getWeekstamp();
SensorId sid(publicSensor.name);
for(uint16_t ws=wsStart; ws<=wsEnd; ws++) {
sid.setRsvd(ws);
sensorDataStore.query(result, sid, start, end, aggregate);
}
} else {
for (std::list<SensorId>::iterator sit = sensorIds.begin(); sit != sensorIds.end(); sit++) {
sensorDataStore.fuzzyQuery(result, *sit, start, tol_ns);
}
SensorId sid(publicSensor.name);
sid.setRsvd(start.getWeekstamp());
sensorDataStore.fuzzyQuery(result, sid, start, tol_ns);
}
}
}
......
......@@ -189,21 +189,6 @@ SCError SensorConfig::isVirtual(bool& isVirtual, std::string publicName)
return impl->isVirtual(isVirtual, publicName);
}
SCError SensorConfig::getSensorPattern(std::string& pattern, std::string publicName)
{
return impl->getSensorPattern(pattern, publicName);
}
SCError SensorConfig::getSensorListForPattern(std::list<SensorId>& sensorIds, std::string pattern)
{
return impl->getSensorListForPattern(sensorIds, pattern);
}
SCError SensorConfig::getSensorListForPattern(std::list<SensorId>& sensorIds, std::string pattern, TimeStamp start, TimeStamp end)
{
return impl->getSensorListForPattern(sensorIds, pattern, start, end);
}
SCError SensorConfig::setSensorScalingFactor(std::string publicName, double scalingFactor) {
return impl->setSensorScalingFactor(publicName, scalingFactor);
}
......@@ -1222,202 +1207,6 @@ SCError SensorConfigImpl::isVirtual(bool& isVirtual, std::string publicName)
return SC_OK;
}
SCError SensorConfigImpl::getSensorPattern(std::string& pattern, std::string publicName)
{
/* Check if the session is valid */
if (!session) {
return SC_INVALIDSESSION;
}
/* Ensure that the public sensor is not virtual */
bool virt;
SCError err = isVirtual(virt, publicName);
if (err != SC_OK) {
return err;
}
if (virt) {
return SC_WRONGTYPE;
}
/* Read the Pattern string from the database */
CassError rc = CASS_OK;
CassStatement* statement = nullptr;
CassFuture* future = nullptr;
const CassPrepared* prepared = nullptr;
const char* query = "SELECT pattern FROM " CONFIG_KEYSPACE_NAME "." CF_PUBLISHEDSENSORS " WHERE name = ? ;";
future = cass_session_prepare(session, query);
cass_future_wait(future);
rc = cass_future_error_code(future);
if (rc != CASS_OK) {
connection->printError(future);
cass_future_free(future);
return SC_UNKNOWNERROR;
} else {
prepared = cass_future_get_prepared(future);
}
cass_future_free(future);
statement = cass_prepared_bind(prepared);
cass_statement_bind_string_by_name(statement, "name", publicName.c_str());
future = cass_session_execute(session, statement);
cass_future_wait(future);
rc = cass_future_error_code(future);
if (rc != CASS_OK) {
connection->printError(future);
} else {
const CassResult* result = cass_future_get_result(future);
CassIterator* iterator = cass_iterator_from_result(result);
if (cass_iterator_next(iterator)) {
const char* pattern_cstr;
size_t pattern_len;
const CassRow* row = cass_iterator_get_row(iterator);
cass_value_get_string(cass_row_get_column_by_name(row, "pattern"), &pattern_cstr, &pattern_len);
pattern = std::string(pattern_cstr, pattern_len);
}
else {
cass_result_free(result);
cass_iterator_free(iterator);
cass_future_free(future);
cass_statement_free(statement);
cass_prepared_free(prepared);
return SC_UNKNOWNSENSOR;
}
cass_result_free(result);
cass_iterator_free(iterator);
}
cass_future_free(future);
cass_statement_free(statement);
cass_prepared_free(prepared);
return SC_OK;
}
SCError SensorConfigImpl::getSensorListForPattern(std::list<SensorId>& sensorIds, std::string pattern)
{
/* Tiny hack to call the long version of this function */
TimeStamp start((uint64_t)0x0);
TimeStamp end((uint64_t)0x260DD31906D70000);
return getSensorListForPattern(sensorIds, pattern, start, end);
}
SCError SensorConfigImpl::getSensorListForPattern(std::list<SensorId>& sensorIds, std::string pattern, TimeStamp start, TimeStamp end)
{
/* Clear the list of sensorIds */
sensorIds.clear();
/* Strip all slashes from publishedSensorName */
//pattern.erase(std::remove(pattern.begin(), pattern.end(), '/'), pattern.end());
uint16_t wsStart = start.getWeekstamp();
uint16_t wsEnd = end.getWeekstamp();
for(uint16_t ws=wsStart; ws<=wsEnd; ws++) {
SensorId sensor;
sensor.setId(pattern);
sensor.setRsvd(ws);
sensorIds.push_back(sensor);
}
return SC_OK;
// /* Clear the list of sensorIds */
// sensorIds.clear();
//
// /* Strip all slashes from publishedSensorName */
// pattern.erase(std::remove(pattern.begin(), pattern.end(), '/'), pattern.end());
//
// /* Calculate lower and upper boundaries for the expansion of the pattern */
// std::string low = pattern;
// std::string high = pattern;
// if (pattern.find("*") != std::string::npos) {
// low.replace(pattern.find("*"), 1, MAX_PATTERN_LENGTH-pattern.length(), 0);
// high.replace(pattern.find("*"), 1, MAX_PATTERN_LENGTH-pattern.length(), 127);
// }
//
// SensorId lowId, highId;
// if (!lowId.mqttTopicConvert(low)) {
// return SC_INVALIDPATTERN;
// }
// if (!highId.mqttTopicConvert(high)) {
// return SC_INVALIDPATTERN;
// }
//
// std::cout << "Lower boundary for sensor scan: " << std::hex << std::setfill('0') << std::setw(16) << lowId.raw[0] << " " << std::hex << std::setfill('0') << std::setw(16) << lowId.raw[1] << std::endl;
// std::cout << "Upper boundary for sensor scan: " << std::hex << std::setfill('0') << std::setw(16) << highId.raw[0] << " " << std::hex << std::setfill('0') << std::setw(16) << highId.raw[1] << std::endl;
//
// /* Query the database to see which raw sensors actually exist in the interval between low and high */
// CassError rc = CASS_OK;
// CassStatement* statement = nullptr;
// CassFuture* future = nullptr;
// const CassPrepared* prepared = nullptr;
// const char* query = "SELECT DISTINCT sid,ws FROM " KEYSPACE_NAME "." CF_SENSORDATA " WHERE TOKEN(sid) >= TOKEN(?) and TOKEN(sid) <= TOKEN(?) and ws >= ? and ws <= ?;";
//
// future = cass_session_prepare(session, query);
// cass_future_wait(future);
//
// rc = cass_future_error_code(future);
// if (rc != CASS_OK) {
// connection->printError(future);
// return SC_UNKNOWNERROR;
// }
//
// prepared = cass_future_get_prepared(future);
// cass_future_free(future);
//
// statement = cass_prepared_bind(prepared);
//
// cass_statement_bind_string(statement, 0, low.c_str());
// cass_statement_bind_string(statement, 1, high.c_str());
// cass_statement_bind_int16(statement, 2, (cass_int16_t)start.getWeekstamp());
// cass_statement_bind_int16(statement, 3, (cass_int16_t)end.getWeekstamp());
//
// future = cass_session_execute(session, statement);
// cass_future_wait(future);
//
// rc = cass_future_error_code(future);
// if (rc != CASS_OK) {
// connection->printError(future);
// return SC_UNKNOWNERROR;
// }
//
// const CassResult* result = cass_future_get_result(future);
// cass_future_free(future);
//
// CassIterator* iterator = cass_iterator_from_result(result);
// while (cass_iterator_next(iterator)) {
// const CassRow* row = cass_iterator_get_row(iterator);
// const char* res;
// size_t res_len;
// cass_int16_t res_ws;
// cass_value_get_string(cass_row_get_column_by_name(row, "sid"), &res, &res_len);
// cass_value_get_int16(cass_row_get_column_by_name(row, "ws"), &res_ws);
//
// SensorId sensor;
// std::string id(res, res_len);
// sensor.setId(id);
//
// /* Check if the sensorId matches the pattern and append to result */
// if (sensor.patternMatch(pattern)) {
// /* Only append if within the weekstamp window */
// if ((res_ws >= start.getWeekstamp()) && (res_ws <= end.getWeekstamp())) {
// sensorIds.push_back(sensor);
// }
// }
// }
// cass_result_free(result);
// cass_iterator_free(iterator);
// cass_statement_free(statement);
// cass_prepared_free(prepared);
//
// return SC_OK;
}
SCError SensorConfigImpl::setSensorScalingFactor(std::string publicName, double scalingFactor)
{
SCError error = SC_UNKNOWNERROR;
......
......@@ -124,21 +124,8 @@ void PhysicalSensorCache::populate(Connection* connection, SensorConfig& sc, uin
CassSession* session = connection->getSessionHandle();
/* Expand the sensor's public name into its internal SensorId */
std::list<DCDB::SensorId> sensorIds;
switch (sc.getSensorListForPattern(sensorIds, s.pattern, t, t)) {
case DCDB::SC_OK:
break;
case DCDB::SC_INVALIDPATTERN:
std::cout << "Invalid pattern." << std::endl;
return;
default:
std::cout << "Unknown error." << std::endl;
return;
}
/* The sensorIds list should only contain one entry */
std::list<DCDB::SensorId>::iterator sit = sensorIds.begin();
// std::cout << "Raw sensor id: " << std::hex << std::setfill('0') << std::setw(16) << sit->getRaw()[0] << " " << std::hex << std::setfill('0') << std::setw(16) << sit->getRaw()[1] << std::dec << std::endl;
DCDB::SensorId sid(s.name);
sid.setRsvd(DCDB::TimeStamp(t).getWeekstamp());
/* Find the readings before and after time t */
CassError rc = CASS_OK;
......@@ -163,8 +150,8 @@ void PhysicalSensorCache::populate(Connection* connection, SensorConfig& sc, uin
cass_future_free(future);
statement = cass_prepared_bind(prepared);
cass_statement_bind_string(statement, 0, sit->getId().c_str());
cass_statement_bind_int16(statement, 1, sit->getRsvd());
cass_statement_bind_string(statement, 0, sid.getId().c_str());
cass_statement_bind_int16(statement, 1, sid.getRsvd());
cass_statement_bind_int64(statement, 2, t);
future = cass_session_execute(session, statement);
......@@ -182,7 +169,7 @@ void PhysicalSensorCache::populate(Connection* connection, SensorConfig& sc, uin
cass_value_get_int64(cass_row_get_column_by_name(row, "value"), &value);
SensorDataStoreReading r;
r.sensorId = *sit;
r.sensorId = sid;
r.timeStamp = (uint64_t)ts;
r.value = (int64_t)value;
......@@ -211,8 +198,8 @@ void PhysicalSensorCache::populate(Connection* connection, SensorConfig& sc, uin
cass_future_free(future);
statement = cass_prepared_bind(prepared);
cass_statement_bind_string(statement, 0, sit->getId().c_str());
cass_statement_bind_int16(statement, 1, sit->getRsvd());
cass_statement_bind_string(statement, 0, sid.getId().c_str());
cass_statement_bind_int16(statement, 1, sid.getRsvd());
cass_statement_bind_int64(statement, 2, t);
future = cass_session_execute(session, statement);
......@@ -230,7 +217,7 @@ void PhysicalSensorCache::populate(Connection* connection, SensorConfig& sc, uin
cass_value_get_int64(cass_row_get_column_by_name(row, "value"), &value);
SensorDataStoreReading r;
r.sensorId = *sit;
r.sensorId = sid;
r.timeStamp = (uint64_t)ts;
r.value = (int64_t)value;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment