OniSensorInfo getSensorInfo() { VideoModeMap supported_modes = getSupportedVideoModes(); OniVideoMode* modes = new OniVideoMode[supported_modes.size()]; std::transform(supported_modes.begin(), supported_modes.end(), modes, ExtractKey()); OniSensorInfo sensors = { getSensorType(), static_cast<int>(supported_modes.size()), modes }; return sensors; }
string Host::generateQuery(hostMessage sensorData, Database db) { string table; stringstream values; int type = getSensorType(sensorData); if(type == SENSOR_TYPE_SENSORDATA) { table = "sensorvalues(host_id, name, value, created_at)"; values << sensorData.hostID << ", '" << Database::escapeString(sensorData.type) << "', '" << Database::escapeString(sensorData.value) << "', NOW()"; } else if(type == SENSOR_TYPE_PROFILEDATA) { if(sensorData.type == "profile_hostname"){ stringstream query; query << "UPDATE hosts SET hostname = '" << Database::escapeString(sensorData.value) << "' WHERE id = " << sensorData.hostID; return query.str(); } if(sensorData.type == "profile_domainname"){ stringstream query; query << "UPDATE hosts SET domainname = '" << Database::escapeString(sensorData.value) << "' WHERE id = " << sensorData.hostID; return query.str(); } if(sensorData.type == "profile_kernel"){ stringstream query; query << "UPDATE hosts SET linux_kernelversion = '" << Database::escapeString(sensorData.value) << "' WHERE id = " << sensorData.hostID; return query.str(); } if(sensorData.type == "profile_total_memory"){ stringstream query; query << "UPDATE hosts SET total_memory = '" << Database::escapeString(sensorData.value) << "' WHERE id = " << sensorData.hostID; return query.str(); } if(sensorData.type == "profile_total_swap"){ stringstream query; query << "UPDATE hosts SET total_swap = '" << Database::escapeString(sensorData.value) << "' WHERE id = " << sensorData.hostID; return query.str(); } if(sensorData.type == "profile_sp_client_version"){ stringstream query; query << "UPDATE hosts SET clientversion = '" << Database::escapeString(sensorData.value) << "' WHERE id = " << sensorData.hostID; return query.str(); } if(sensorData.type == "profile_network_interfaces") { stringstream delquery; delquery << "DELETE FROM networkinterfaces WHERE host_id = " << sensorData.hostID; db.setQuery(db.getHandle(), delquery.str()); vector<string> queries = buildNetworkInterfacesQuery(sensorData.value, sensorData.hostID); for(vector<string>::const_iterator iter = queries.begin(); iter != queries.end(); ++iter) { db.setQuery(db.getHandle(), *iter); } // Let the calling method know that we already inserted the values for this packet. return "done"; } if(sensorData.type == "profile_cpus") { stringstream delquery; delquery << "DELETE FROM cpus WHERE host_id = " << sensorData.hostID; db.setQuery(db.getHandle(), delquery.str()); vector<string> queries = buildCpusQuery(sensorData.value, sensorData.hostID); for(vector<string>::const_iterator iter = queries.begin(); iter != queries.end(); ++iter) { db.setQuery(db.getHandle(), *iter); } // Let the calling method know that we already inserted the values for this packet. return "done"; } } else { return "err"; } return "INSERT INTO " + table + " VALUES( " + values.str() + ")"; }
bool Host::receiveAndStoreData(Database db) { // Receive the sensor data. string msg = receive(); // Check if the messsage was received successfully. if(msg == "err") { lastError = "Could not receive message from client."; return 0; } hostMessage sensorData = parse(msg); string query = generateQuery(sensorData, db); if(query == "err") { lastError = "Could not generate query."; return 0; } if(query == "done") { // The data has been inserted by generateQuery()! (i know..) return 1; } // Recent sensor data. if(getSensorType(sensorData) == SENSOR_TYPE_SENSORDATA) { if(!db.setQuery(db.getHandle(), generateDeletionQueryForRecentData(sensorData)) || !db.setQuery(db.getHandle(), generateQueryForRecentData(sensorData))) { lastError = "Could not store data in recent value table. Database error: " + db.getError(); return 0; } } if(!db.setQuery(db.getHandle(), query)) { lastError = "Could not store data. Database error: " + db.getError(); return 0; } else { return 1; } }