Metrics logging now includes average time taken per frame. Also, metrics now come in a single JSON payload to /metrics.

This commit is contained in:
Fabian Schlenz 2019-09-25 06:40:24 +02:00
parent 62549e73bf
commit 73b8d162c7
3 changed files with 25 additions and 12 deletions

View File

@ -18,6 +18,7 @@ void mqtt_setup();
void mqtt_loop(); void mqtt_loop();
void mqtt_publish(const char* topic, int number); void mqtt_publish(const char* topic, int number);
void mqtt_publish(const char* topic, const char* message);
void mqtt_log(const char* message); void mqtt_log(const char* message);
void mqtt_log(int number); void mqtt_log(int number);

View File

@ -23,7 +23,10 @@ void mqtt_callback(char* original_topic, byte* pl, unsigned int length) {
pl[length] = '\0'; pl[length] = '\0';
String payload((char*)pl); String payload((char*)pl);
String topic (original_topic); String topic (original_topic);
if (topic.compareTo(MQTT_TOPIC "log")==0) return; if (topic.compareTo(MQTT_TOPIC "log")==0 || topic.compareTo(MQTT_TOPIC "status") || topic.compareTo(MQTT_TOPIC "metrics")) {
// Return our own messages
return;
}
LOGln("MQTT * In: %s = %s", topic.c_str(), payload.c_str()); LOGln("MQTT * In: %s = %s", topic.c_str(), payload.c_str());
if (topic.startsWith(MQTT_TOPIC_WEATHER)) { if (topic.startsWith(MQTT_TOPIC_WEATHER)) {
// Weather stuff // Weather stuff
@ -51,11 +54,6 @@ void mqtt_callback(char* original_topic, byte* pl, unsigned int length) {
topic.remove(0, strlen(MQTT_TOPIC)); // Strip MQTT_TOPIC from the beginning topic.remove(0, strlen(MQTT_TOPIC)); // Strip MQTT_TOPIC from the beginning
if (topic.compareTo("free_heap")==0 || topic.compareTo("uptime")==0 || topic.compareTo("status")==0 || topic.compareTo("fps")==0) {
// Ignore our own messages.
return;
}
if(topic.compareTo("mode")==0) { if(topic.compareTo("mode")==0) {
LOGln("MQTT * Changing mode..."); LOGln("MQTT * Changing mode...");
bool result = change_current_effect(payload); bool result = change_current_effect(payload);
@ -125,11 +123,15 @@ void mqtt_loop() {
String mqtt_log_str = String(); String mqtt_log_str = String();
void mqtt_publish(const char* topic, int number) { void mqtt_publish(const char* topic, int number) {
char t[127];
sprintf(t, MQTT_TOPIC "%s", topic);
char b[32]; char b[32];
sprintf(b, "%d", number); sprintf(b, "%d", number);
mqtt_client.publish(t, b); mqtt_publish(topic, b);
}
void mqtt_publish(const char* topic, const char* message) {
char t[127];
sprintf(t, MQTT_TOPIC "%s", topic);
mqtt_client.publish(t, message);
} }
void mqtt_log(const char* message) { void mqtt_log(const char* message) {

View File

@ -19,6 +19,10 @@ char hostname[30]; // defined as extern in prototypes.h
#ifdef RECORDER_ENABLE #ifdef RECORDER_ENABLE
Recorder* recorder; Recorder* recorder;
#endif #endif
#ifdef MQTT_REPORT_METRICS
uint16_t metrics_frame_count = 0;
unsigned long metrics_frame_time = 0;
#endif
void setup() { void setup() {
Serial.begin(74880); Serial.begin(74880);
@ -91,6 +95,10 @@ void loop() {
effect_clock.loop(current_effect->clock_as_mask(), CRGB(0xFFFFFF), CRGB(0x000000)); effect_clock.loop(current_effect->clock_as_mask(), CRGB(0xFFFFFF), CRGB(0x000000));
} }
FastLED.show(); FastLED.show();
#ifdef MQTT_REPORT_METRICS
metrics_frame_count++;
metrics_frame_time += (millis() - loop_started_at);
#endif
#ifdef RECORDER_ENABLE #ifdef RECORDER_ENABLE
recorder->loop(); recorder->loop();
@ -99,9 +107,11 @@ void loop() {
#if defined(MQTT_ENABLE) && defined(MQTT_REPORT_METRICS) #if defined(MQTT_ENABLE) && defined(MQTT_REPORT_METRICS)
EVERY_N_SECONDS(15) { EVERY_N_SECONDS(15) {
mqtt_publish("free_heap", ESP.getFreeHeap()); char json[120];
mqtt_publish("uptime", millis()/1000); snprintf(json, 120, "{\"free_heap\":%u, \"uptime\":%lu, \"fps\":%d, \"time_per_frame\":%lu}", ESP.getFreeHeap(), millis()/1000, FastLED.getFPS(), metrics_frame_time / metrics_frame_count);
mqtt_publish("fps", FastLED.getFPS()); mqtt_publish("metrics", json);
metrics_frame_count = 0;
metrics_frame_time = 0;
} }
#endif // MQTT_REPORT_METRICS #endif // MQTT_REPORT_METRICS