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

update errors and deployment

parent 699b5740
Branches
Tags
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.
Please register or to comment