Skip to content
Snippets Groups Projects
Commit a8267e8b authored by Sergey Yakubov's avatar Sergey Yakubov
Browse files

update errors and deployment

parent 699b5740
No related branches found
No related tags found
No related merge requests found
#include "error.h"
#include "asapo/common/utils.h"
namespace asapo {
template<typename ServiceErrorType>
......@@ -91,13 +92,13 @@ template<typename ServiceErrorType>
std::string ServiceError<ServiceErrorType>::ExplainInJSON() const noexcept {
std::string err = WrapInQuotes("error") + ":" + WrapInQuotes(error_name_);
if (!error_message_.empty()) {
err += "," + WrapInQuotes("message") + ":" + WrapInQuotes(error_message_);
err += "," + WrapInQuotes("message") + ":" + WrapInQuotes(EscapeJson(error_message_));
}
if (!details_.empty()) {
err += "," + WrapInQuotes("details") + ":{";
auto i = 0;
for (const auto &kv : details_) {
err += (i > 0 ? ", " : "") + WrapInQuotes(kv.first) + ":" + WrapInQuotes(kv.second);
err += (i > 0 ? ", " : "") + WrapInQuotes(kv.first) + ":" + WrapInQuotes(EscapeJson(kv.second));
i++;
}
err += "}";
......
#ifndef ASAPO_COMMON_CPP_INCLUDE_ASAPO_COMMON_UTILS_H_
#define ASAPO_COMMON_CPP_INCLUDE_ASAPO_COMMON_UTILS_H_
#include <iomanip>
#include <sstream>
namespace asapo {
inline std::string EscapeJson(const std::string& s) {
std::ostringstream o;
for (auto c = s.cbegin(); c != s.cend(); c++) {
switch (*c) {
case '"':
o << "\\\"";
break;
case '\\':
o << "\\\\";
break;
case '\b':
o << "\\b";
break;
case '\f':
o << "\\f";
break;
case '\n':
o << "\\n";
break;
case '\r':
o << "\\r";
break;
case '\t':
o << "\\t";
break;
default:
if ('\x00' <= *c && *c <= '\x1f') {
o << "\\u"
<< std::hex << std::setw(4) << std::setfill('0') << (int)*c;
} else {
o << *c;
}
}
}
return o.str();
}
}
#endif //ASAPO_COMMON_CPP_INCLUDE_ASAPO_COMMON_UTILS_H_
......@@ -49,7 +49,6 @@ class JsonFileParser : public JsonParser {
JsonFileParser(const std::string& json, const std::unique_ptr<IO>* io = nullptr): JsonParser(json, io) {};
};
}
......
......@@ -46,7 +46,7 @@ Error MongoDBClient::Ping() {
bson_destroy(&reply);
bson_destroy(command);
return !retval ? DBErrorTemplates::kConnectionError.Generate() : nullptr;
return !retval ? DBErrorTemplates::kConnectionError.Generate("cannot ping database") : nullptr;
}
MongoDBClient::MongoDBClient() {
......@@ -58,7 +58,7 @@ Error MongoDBClient::InitializeClient(const std::string& address) {
client_ = mongoc_client_new(uri_str.c_str());
if (client_ == nullptr) {
return DBErrorTemplates::kBadAddress.Generate();
return DBErrorTemplates::kBadAddress.Generate("cannot initialize database");
}
write_concern_ = mongoc_write_concern_new();
......
......@@ -61,12 +61,12 @@ LogMessageWithFields::LogMessageWithFields(std::string key, double val, int prec
LogMessageWithFields::LogMessageWithFields(std::string val) {
if (!val.empty()) {
log_string_ = EncloseQuotes("message") + ":" + EncloseQuotes(escape_json(val));
log_string_ = EncloseQuotes("message") + ":" + EncloseQuotes(EscapeJson(val));
}
}
LogMessageWithFields::LogMessageWithFields(std::string key, std::string val) {
log_string_ = EncloseQuotes(std::move(key)) + ":" + EncloseQuotes(escape_json(val));
log_string_ = EncloseQuotes(std::move(key)) + ":" + EncloseQuotes(EscapeJson(val));
}
inline std::string LogMessageWithFields::CommaIfNeeded() {
......@@ -85,7 +85,7 @@ LogMessageWithFields &LogMessageWithFields::Append(std::string key, double val,
}
LogMessageWithFields &LogMessageWithFields::Append(std::string key, std::string val) {
log_string_ += CommaIfNeeded() + EncloseQuotes(std::move(key)) + ":" + EncloseQuotes(escape_json(val));
log_string_ += CommaIfNeeded() + EncloseQuotes(std::move(key)) + ":" + EncloseQuotes(EscapeJson(val));
return *this;
}
......
......@@ -3,8 +3,8 @@
#include "fluentd_sink.h"
#include <sstream>
#include <iomanip>
#include "asapo/common/utils.h"
namespace asapo {
......@@ -30,46 +30,9 @@ void SpdLogger::SetLogLevel(LogLevel level) {
}
}
std::string escape_json(const std::string& s) {
std::ostringstream o;
for (auto c = s.cbegin(); c != s.cend(); c++) {
switch (*c) {
case '"':
o << "\\\"";
break;
case '\\':
o << "\\\\";
break;
case '\b':
o << "\\b";
break;
case '\f':
o << "\\f";
break;
case '\n':
o << "\\n";
break;
case '\r':
o << "\\r";
break;
case '\t':
o << "\\t";
break;
default:
if ('\x00' <= *c && *c <= '\x1f') {
o << "\\u"
<< std::hex << std::setw(4) << std::setfill('0') << (int)*c;
} else {
o << *c;
}
}
}
return o.str();
}
std::string EncloseMsg(std::string msg) {
if (msg.find("\"") != 0) {
return std::string(R"("message":")") + escape_json(msg) + "\"";
return std::string(R"("message":")") + EscapeJson(msg) + "\"";
} else {
return msg;
}
......
......@@ -38,7 +38,7 @@ class SpdLogger : public AbstractLogger {
};
std::string EncloseMsg(std::string msg);
std::string escape_json(const std::string& s);
std::string EscapeJson(const std::string& s);
}
......
......@@ -45,7 +45,7 @@ ASAPO_LIGHTWEIGHT_SERVICE_NODES=`scontrol show hostnames $SLURM_JOB_NODELIST | h
mkdir -p $NOMAD_ALLOC_HOST_SHARED $SERVICE_DATA_CLUSTER_SHARED $DATA_GLOBAL_SHARED $MONGO_DIR
chmod 777 $NOMAD_ALLOC_HOST_SHARED $SERVICE_DATA_CLUSTER_SHARED $DATA_GLOBAL_SHARED $MONGO_DIR
cd $SERVICE_DATA_CLUSTER_SHARED
mkdir esdatadir fluentd grafana influxdb mongodb
mkdir esdatadir fluentd grafana influxdb mongodb prometheus alertmanager
chmod 777 *
#todo: elastic search check
......
......@@ -27,6 +27,8 @@ job "asapo-monitoring" {
driver = "docker"
user = "${asapo_user}"
config {
security_opt = ["no-new-privileges"]
userns_mode = "host"
image = "prom/alertmanager:${alertmanager_version}"
args = [
"--web.route-prefix=/alertmanager/",
......@@ -87,6 +89,8 @@ job "asapo-monitoring" {
driver = "docker"
user = "${asapo_user}"
config {
security_opt = ["no-new-privileges"]
userns_mode = "host"
image = "prom/prometheus:${prometheus_version}"
args = [
"--web.external-url=/prometheus/",
......
......@@ -16,7 +16,7 @@ mkdir -p $NOMAD_ALLOC_HOST_SHARED $SERVICE_DATA_CLUSTER_SHARED $DATA_GLOBAL_SHAR
chmod 777 $NOMAD_ALLOC_HOST_SHARED $SERVICE_DATA_CLUSTER_SHARED $DATA_GLOBAL_SHARED $DATA_GLOBAL_SHARED_ONLINE
cd $SERVICE_DATA_CLUSTER_SHARED
mkdir -p fluentd grafana influxdb influxdb2 mongodb
mkdir -p fluentd grafana influxdb influxdb2 mongodb prometheus alertmanager
chmod 777 *
docker run --privileged --rm -v /var/run/docker.sock:/var/run/docker.sock \
......
......@@ -22,7 +22,7 @@ mkdir -p $NOMAD_ALLOC_HOST_SHARED $SERVICE_DATA_CLUSTER_SHARED $DATA_GLOBAL_SHAR
chmod 777 $NOMAD_ALLOC_HOST_SHARED $SERVICE_DATA_CLUSTER_SHARED $DATA_GLOBAL_SHARED $DATA_GLOBAL_SHARED_ONLINE
cd $SERVICE_DATA_CLUSTER_SHAREDdetector
mkdir -p fluentd grafana influxdb2 mongodb
mkdir -p fluentd grafana influxdb influxdb2 mongodb prometheus alertmanager
chmod 777 *
docker run --privileged --userns=host --security-opt no-new-privileges --rm \
......
......@@ -81,9 +81,9 @@ Error RequestHandlerDb::DBErrorToReceiverError(Error err) const {
Error return_err;
if (err == DBErrorTemplates::kWrongInput || err == DBErrorTemplates::kNoRecord
|| err == DBErrorTemplates::kJsonParseError) {
return_err = ReceiverErrorTemplates::kBadRequest.Generate();
return_err = ReceiverErrorTemplates::kBadRequest.Generate("error from database");
} else {
return_err = ReceiverErrorTemplates::kInternalServerError.Generate();
return_err = ReceiverErrorTemplates::kInternalServerError.Generate("error from database");
}
return_err->SetCause(std::move(err));
return return_err;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment