提交 ad4dc58a 编写于 作者: Y Yan Chunwei 提交者: GitHub

Merge pull request #46 from ChunweiYan/feature/support_web_server_storage_read

...@@ -62,7 +62,7 @@ PYBIND11_PLUGIN(core) { ...@@ -62,7 +62,7 @@ PYBIND11_PLUGIN(core) {
&vs::start_write_service, &vs::start_write_service,
"global information-maintainer object."); "global information-maintainer object.");
m.def("im", &vs::im); m.def("im", &vs::im);
m.def("stop_threads", &vs::StopThreads); m.def("stop_threads", &vs::stop_threads);
// interfaces for components // interfaces for components
#define ADD_SCALAR_TYPED_INTERFACE(T, name__) \ #define ADD_SCALAR_TYPED_INTERFACE(T, name__) \
......
...@@ -60,8 +60,6 @@ std::string TabletHelper::human_readable_buffer() const { ...@@ -60,8 +60,6 @@ std::string TabletHelper::human_readable_buffer() const {
return buffer; return buffer;
} }
void ImHelper::PersistToDisk() const { IM::Global().PersistToDisk(); }
// implementations for components // implementations for components
namespace components { namespace components {
......
...@@ -96,14 +96,69 @@ class ImHelper { ...@@ -96,14 +96,69 @@ class ImHelper {
public: public:
ImHelper() {} ImHelper() {}
/* StorageHelper storage() {
* mode: return StorageHelper(IM::Global().storage().mutable_data());
* 0: read }
* 1: write TabletHelper tablet(const std::string &tag) {
* 2: none return TabletHelper(IM::Global().storage().tablet(tag));
*/ }
TabletHelper AddTablet(const std::string &tag, int num_samples) {
return TabletHelper(IM::Global().AddTablet(tag, num_samples));
}
void ClearTablets() {
IM::Global().storage().mutable_data()->clear_tablets();
}
void PersistToDisk() const { IM::Global().PersistToDisk(); }
};
namespace components {
/*
* Read and write support for Scalar component.
*/
template <typename T>
class ScalarHelper {
public:
ScalarHelper(storage::Tablet *tablet) : data_(tablet) {}
void SetCaptions(const std::vector<std::string> &captions);
void AddRecord(int id, const std::vector<T> &values);
std::vector<std::vector<T>> GetRecords() const;
std::vector<int> GetIds() const;
std::vector<int> GetTimestamps() const;
std::vector<std::string> GetCaptions() const;
size_t GetSize() const { return data_->records_size(); }
private:
storage::Tablet *data_;
};
} // namespace components
static ImHelper &im() {
static ImHelper im;
return im;
}
static void start_read_service(const std::string &dir) {
IM::Global().SetPersistDest(dir);
IM::Global().MaintainRead();
}
static void start_write_service(const std::string &dir) {
IM::Global().SetPersistDest(dir);
IM::Global().MaintainWrite();
} }
static void stop_threads() { cc::PeriodExector::Global().Quit(); }
} // namespace visualdl } // namespace visualdl
#endif // VISUALDL_BACKEND_LOGIC_SDK_H #endif // VISUALDL_BACKEND_LOGIC_SDK_H
...@@ -4,5 +4,5 @@ add_library(storage_proto ${PROTO_SRCS}) ...@@ -4,5 +4,5 @@ add_library(storage_proto ${PROTO_SRCS})
add_dependencies(storage_proto protobuf) add_dependencies(storage_proto protobuf)
## add storage as target ## add storage as target
add_library(storage storage.cc ${PROTO_SRCS} ${PROTO_HDRS}) add_library(storage storage.cc storage.h ${PROTO_SRCS} ${PROTO_HDRS})
add_dependencies(storage storage_proto) add_dependencies(storage storage_proto)
...@@ -30,12 +30,27 @@ struct PeriodExector { ...@@ -30,12 +30,27 @@ struct PeriodExector {
void Start() { quit = false; } void Start() { quit = false; }
void operator()(task_t&& task, int msec) { void operator()(task_t&& task, int msec) {
const int interval = 500;
auto task_wrapper = [=] { auto task_wrapper = [=] {
while (!quit) { while (!quit) {
if (!task()) break; if (!task()) break;
std::this_thread::sleep_for(std::chrono::milliseconds(msec)); // if the program is terminated, quit while as soon as possible.
// this is just trick, but should works.
if (msec > 1000) {
int i;
for (i = 0; i < msec / interval; i++) {
if (quit) break;
std::this_thread::sleep_for(std::chrono::milliseconds(interval));
}
std::this_thread::sleep_for(
std::chrono::milliseconds(msec - i * interval));
if (quit) break;
} else {
std::this_thread::sleep_for(std::chrono::milliseconds(msec));
}
} }
LOG(INFO) << "quit job"; LOG(INFO) << "quit concurrent job";
}; };
threads_.emplace_back(std::thread(std::move(task_wrapper))); threads_.emplace_back(std::thread(std::move(task_wrapper)));
msec_ = msec; msec_ = msec;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册