summaryrefslogtreecommitdiff
path: root/datastore-leveldb/src
diff options
context:
space:
mode:
authorYves Fischer <yvesf-git@xapek.org>2013-04-18 17:34:27 +0200
committerYves Fischer <yvesf-git@xapek.org>2013-04-18 17:34:27 +0200
commit87f4134201f0a0840415aab531e32ca714bc7a36 (patch)
treecf148ecc810f92ca2e4c177498a56130806ed4e4 /datastore-leveldb/src
parent7c8e064216cc672557cbf3892ff090490505e408 (diff)
downloadebus-alt-87f4134201f0a0840415aab531e32ca714bc7a36.tar.gz
ebus-alt-87f4134201f0a0840415aab531e32ca714bc7a36.zip
leveldb geht so
Diffstat (limited to 'datastore-leveldb/src')
-rw-r--r--datastore-leveldb/src/db.cpp3
-rw-r--r--datastore-leveldb/src/server.cpp (renamed from datastore-leveldb/src/main.cpp)0
-rw-r--r--datastore-leveldb/src/web.cpp27
3 files changed, 17 insertions, 13 deletions
diff --git a/datastore-leveldb/src/db.cpp b/datastore-leveldb/src/db.cpp
index a952512..84e30f3 100644
--- a/datastore-leveldb/src/db.cpp
+++ b/datastore-leveldb/src/db.cpp
@@ -12,7 +12,8 @@ static bool sensor_name_is_sane(std::string& name) {
for (auto it = name.begin(); it != name.end(); ++it) {
if (not ((*it >= '0' and *it <= '9') or
(*it >= 'A' and *it <= 'Z') or
- (*it >= 'a' and *it <= 'z'))) {
+ (*it >= 'a' and *it <= 'z') or
+ (*it == '.'))) {
return false;
}
}
diff --git a/datastore-leveldb/src/main.cpp b/datastore-leveldb/src/server.cpp
index 3000a25..3000a25 100644
--- a/datastore-leveldb/src/main.cpp
+++ b/datastore-leveldb/src/server.cpp
diff --git a/datastore-leveldb/src/web.cpp b/datastore-leveldb/src/web.cpp
index 2adf8eb..efff6b9 100644
--- a/datastore-leveldb/src/web.cpp
+++ b/datastore-leveldb/src/web.cpp
@@ -23,7 +23,7 @@ static inline bool parse_key(leveldb::Slice &&key, uint64_t *value) {
const boost::regex web_handle_api_value_R(
- "/api/value/([a-zA-Z0-9]+)/([0-9]+)");
+ "/api/value/([a-zA-Z0-9\\.]+)/([0-9]+)");
void web_handle_api_value(const boost::cmatch &match, struct mg_connection *conn) {
std::string sensor(match[1].str());
uint64_t timestamp = std::stoul(match[2].str());
@@ -69,7 +69,7 @@ static inline void print_json_tuple(struct mg_connection *conn,
const boost::regex web_handle_api_range_R(
- "/api/range/([a-zA-Z0-9]+)/([0-9]+)/([0-9]+)");
+ "/api/range/([a-zA-Z0-9\\.]+)/([0-9]+)/([0-9]+)");
void web_handle_api_range(const boost::cmatch &match, struct mg_connection *conn) {
std::string sensor(match[1].str());
uint64_t start = std::stoul(match[2].str());
@@ -86,11 +86,13 @@ void web_handle_api_range(const boost::cmatch &match, struct mg_connection *conn
mg_printf(conn,
"HTTP/1.1 200 OK\r\n"
- "Content-Type: application/json; encoding=UTF-8\r\n"
+ "Content-Type: application/json\r\n"
"\r\n");
std::ostringstream out;
- out << "{'sensor':'" << sensor << "', 'error':null, 'data':[";
+ out << "{\"sensor\":\"" << sensor << "\", "
+ << "\"error\":null, "
+ << "\"data\":[";
mg_write(conn, out.str().c_str(), out.str().size());
leveldb::Iterator* it = db->NewIterator(leveldb::ReadOptions());
@@ -109,7 +111,7 @@ void web_handle_api_range(const boost::cmatch &match, struct mg_connection *conn
}
const boost::regex web_handle_api_range_size_R(
- "/api/range/([a-zA-Z0-9]+)/([0-9]+)/([0-9]+)/([0-9]+)");
+ "/api/range/([a-zA-Z0-9\\.]+)/([0-9]+)/([0-9]+)/([0-9]+)");
void web_handle_api_range_size(const boost::cmatch &match, struct mg_connection *conn) {
std::string sensor(match[1].str());
uint64_t start = std::stoul(match[2].str());
@@ -125,17 +127,17 @@ void web_handle_api_range_size(const boost::cmatch &match, struct mg_connection
mg_printf(conn,
"HTTP/1.1 200 OK\r\n"
- "Content-Type: application/json; encoding=UTF-8\r\n"
+ "Content-Type: application/json\r\n"
"\r\n");
uint64_t step = std::max((uint64_t)1, (end-start) / size);
std::ostringstream out;
- out << "{'sensor':'" << sensor << "', "
- << "'error':null, "
- << "'size':" << size << ", "
- << "'step':" << step << ", "
- << "'data':[";
+ out << "{\"sensor\":\"" << sensor << "\", "
+ << "\"error\":null, "
+ << "\"size\":" << size << ", "
+ << "\"step\":" << step << ", "
+ << "\"data\":[";
mg_write(conn, out.str().c_str(), out.str().size());
bool first = true;
@@ -144,6 +146,7 @@ void web_handle_api_range_size(const boost::cmatch &match, struct mg_connection
leveldb::Iterator* it = db->NewIterator(leveldb::ReadOptions());
for (uint64_t key = start; key <= end; key += step) {
it->Seek(make_key(key));
+ if (!it->Valid()) continue;
if (first) first = false;
else outbuf << ",";
@@ -152,6 +155,6 @@ void web_handle_api_range_size(const boost::cmatch &match, struct mg_connection
outbuf.seekp(0);
actual_size++;
}
- mg_printf(conn, "], 'actual_size':%ld}\r\n", actual_size);
+ mg_printf(conn, "], \"actual_size\":%ld}\r\n", actual_size);
delete it;
}