|
36 | 36 | #include <kernel/pci_manager.hpp> |
37 | 37 | #include <hw/pci_device.hpp> |
38 | 38 | #include <kernel/cpuid.hpp> |
| 39 | +#include <statman> |
39 | 40 |
|
40 | 41 | namespace uplink { |
41 | 42 |
|
@@ -209,17 +210,23 @@ namespace uplink { |
209 | 210 | return; |
210 | 211 | } |
211 | 212 |
|
212 | | - MYINFO("New transport (%lu bytes)", t->size()); |
| 213 | + //MYINFO("New transport (%lu bytes)", t->size()); |
213 | 214 | switch(t->code()) |
214 | 215 | { |
215 | 216 | case Transport_code::UPDATE: |
216 | 217 | { |
217 | | - INFO2("Update received - commencing update..."); |
| 218 | + MYINFO("Update received - commencing update..."); |
218 | 219 |
|
219 | 220 | update({t->begin(), t->end()}); |
220 | 221 | return; |
221 | 222 | } |
222 | 223 |
|
| 224 | + case Transport_code::STATS: |
| 225 | + { |
| 226 | + send_stats(); |
| 227 | + break; |
| 228 | + } |
| 229 | + |
223 | 230 | default: |
224 | 231 | { |
225 | 232 | INFO2("Bad transport"); |
@@ -383,12 +390,7 @@ namespace uplink { |
383 | 390 |
|
384 | 391 | MYINFO("%s", str.c_str()); |
385 | 392 |
|
386 | | - auto transport = Transport{Header{Transport_code::IDENT, static_cast<uint32_t>(str.size())}}; |
387 | | - |
388 | | - transport.load_cargo(str.data(), str.size()); |
389 | | - |
390 | | - ws_->write(transport.data().data(), transport.data().size()); |
391 | | - |
| 393 | + send_message(Transport_code::IDENT, str.data(), str.size()); |
392 | 394 | } |
393 | 395 |
|
394 | 396 | void WS_uplink::send_message(Transport_code code, const char* data, size_t len) { |
@@ -419,4 +421,37 @@ namespace uplink { |
419 | 421 | inet_.nic().flush(); |
420 | 422 | } |
421 | 423 |
|
| 424 | + void WS_uplink::send_stats() |
| 425 | + { |
| 426 | + using namespace rapidjson; |
| 427 | + |
| 428 | + StringBuffer buf; |
| 429 | + Writer<StringBuffer> writer{buf}; |
| 430 | + |
| 431 | + writer.StartArray(); |
| 432 | + auto& statman = Statman::get(); |
| 433 | + for(auto it = statman.begin(); it != statman.end(); ++it) |
| 434 | + { |
| 435 | + auto& stat = *it; |
| 436 | + writer.StartObject(); |
| 437 | + |
| 438 | + writer.Key("name"); |
| 439 | + writer.String(stat.name()); |
| 440 | + |
| 441 | + writer.Key("value"); |
| 442 | + switch(stat.type()) { |
| 443 | + case Stat::UINT64: writer.Uint64(stat.get_uint64()); break; |
| 444 | + case Stat::UINT32: writer.Uint(stat.get_uint32()); break; |
| 445 | + case Stat::FLOAT: writer.Double(stat.get_float()); break; |
| 446 | + } |
| 447 | + |
| 448 | + writer.EndObject(); |
| 449 | + } |
| 450 | + writer.EndArray(); |
| 451 | + |
| 452 | + std::string str = buf.GetString(); |
| 453 | + |
| 454 | + send_message(Transport_code::STATS, str.data(), str.size()); |
| 455 | + } |
| 456 | + |
422 | 457 | } |
0 commit comments