-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathstatus_handler.cc
48 lines (38 loc) · 1.59 KB
/
status_handler.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include "status_handler.h"
#include "status_counter.h"
StatusHandler::StatusHandler() {}
StatusHandler::~StatusHandler() {}
StatusHandler::Status StatusHandler::Init(const std::string& uri_prefix, const NginxConfig& config) {
// To suppress unused param warning
(void) uri_prefix;
(void) config;
return OK;
}
StatusHandler::Status StatusHandler::HandleRequest(const Request& request, Response* response) {
(void) request;
response->SetStatus(Response::ResponseCode::OK);
response->AddHeader("Content-Type", "text/plain");
response->SetBody(CreateResponseBody());
return OK;
}
std::string StatusHandler::GetName() {
return "StatusHandler";
}
std::string StatusHandler::CreateResponseBody() {
std::string response_body = "Total number of requests: " +
std::to_string(StatusCounter::get_instance().request_count_) + "\n\n";
for (auto it = StatusCounter::get_instance().handler_name_map_.begin();
it != StatusCounter::get_instance().handler_name_map_.end(); it++) {
response_body += it->first + " " + it->second + "\n\n";
}
response_body += "Response code count: \n";
for (auto it = StatusCounter::get_instance().status_code_map_.begin();
it != StatusCounter::get_instance().status_code_map_.end(); it++) {
response_body += it->first + "\n";
for (auto i = it->second.begin(); i != it->second.end(); i++) {
response_body += "\t" + std::to_string(i->first) + ": " + std::to_string(i->second) + "\n";
}
response_body += "\n";
}
return response_body;
}