diff options
author | Yves Fischer <yvesf-git@xapek.org> | 2013-04-18 17:34:27 +0200 |
---|---|---|
committer | Yves Fischer <yvesf-git@xapek.org> | 2013-04-18 17:34:27 +0200 |
commit | 87f4134201f0a0840415aab531e32ca714bc7a36 (patch) | |
tree | cf148ecc810f92ca2e4c177498a56130806ed4e4 /datastore-leveldb/src | |
parent | 7c8e064216cc672557cbf3892ff090490505e408 (diff) | |
download | ebus-alt-87f4134201f0a0840415aab531e32ca714bc7a36.tar.gz ebus-alt-87f4134201f0a0840415aab531e32ca714bc7a36.zip |
leveldb geht so
Diffstat (limited to 'datastore-leveldb/src')
-rw-r--r-- | datastore-leveldb/src/db.cpp | 3 | ||||
-rw-r--r-- | datastore-leveldb/src/server.cpp (renamed from datastore-leveldb/src/main.cpp) | 0 | ||||
-rw-r--r-- | datastore-leveldb/src/web.cpp | 27 |
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; } |