17
17
*/
18
18
19
19
#include < algorithm>
20
+ #include < esp_err.h>
20
21
#include < esp_heap_caps.h>
21
22
#include < esp_insights.h>
22
23
#include < esp_log.h>
@@ -134,10 +135,7 @@ void RemoveHashFromPermitlist(const char * str)
134
135
#define LOG_HEAP_INFO (label, group, entry_exit ) \
135
136
do \
136
137
{ \
137
- ESP_DIAG_EVENT (" MTR_TRC" , " %s - %s - %s Min Free heap - %u - LFB - %u Start free heap - %u" , entry_exit, label, group, \
138
- heap_caps_get_minimum_free_size (MALLOC_CAP_8BIT), \
139
- heap_caps_get_largest_free_block (MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT), \
140
- heap_caps_get_free_size (MALLOC_CAP_8BIT)); \
138
+ ESP_DIAG_EVENT (" MTR_TRC" , " %s - %s - %s" , entry_exit, label, group); \
141
139
} while (0 )
142
140
143
141
void ESP32Backend::LogMessageReceived (MessageReceivedInfo & info) {}
@@ -155,34 +153,71 @@ void ESP32Backend::TraceCounter(const char * label)
155
153
::Insights::ESPInsightsCounter::GetInstance (label)->ReportMetrics();
156
154
}
157
155
156
+ void ESP32Backend::RegisterMetric (const char * key, ValueType type)
157
+ {
158
+ // Check for the same key will not have two different types.
159
+ if (mRegisteredMetrics .find (key) != mRegisteredMetrics .end ())
160
+ {
161
+ if (mRegisteredMetrics [key] != type)
162
+ {
163
+ ESP_LOGE (" SYS.MTR" , " Type mismatch for metric key %s" , key);
164
+ return ;
165
+ }
166
+ }
167
+
168
+ switch (type)
169
+ {
170
+ case ValueType::kUInt32 :
171
+ esp_diag_metrics_register (" SYS_MTR" /* Tag of metrics */ , key /* Unique key 8 */ , key /* label displayed on dashboard */ ,
172
+ " insights.mtr" /* hierarchical path */ , ESP_DIAG_DATA_TYPE_UINT /* data_type */ );
173
+ break ;
174
+
175
+ case ValueType::kInt32 :
176
+ esp_diag_metrics_register (" SYS_MTR" /* Tag of metrics */ , key /* Unique key 8 */ , key /* label displayed on dashboard */ ,
177
+ " insights.mtr" /* hierarchical path */ , ESP_DIAG_DATA_TYPE_INT /* data_type */ );
178
+ break ;
179
+
180
+ case ValueType::kChipErrorCode :
181
+ esp_diag_metrics_register (" SYS_MTR" /* Tag of metrics */ , key /* Unique key 8 */ , key /* label displayed on dashboard */ ,
182
+ " insights.mtr" /* hierarchical path */ , ESP_DIAG_DATA_TYPE_UINT /* data_type */ );
183
+ break ;
184
+
185
+ case ValueType::kUndefined :
186
+ ESP_LOGE (" mtr" , " failed to register %s as its value is undefined" , key);
187
+ break ;
188
+ }
189
+
190
+ mRegisteredMetrics [key] = type;
191
+ }
192
+
158
193
void ESP32Backend::LogMetricEvent (const MetricEvent & event)
159
194
{
160
- if (! mRegistered )
195
+ if (mRegisteredMetrics . find (event. key ()) == mRegisteredMetrics . end () )
161
196
{
162
- esp_diag_metrics_register (" SYS_MTR" /* Tag of metrics */ , event.key () /* Unique key 8 */ ,
163
- event.key () /* label displayed on dashboard */ , " insights.mtr" /* hierarchical path */ ,
164
- ESP_DIAG_DATA_TYPE_INT /* data_type */ );
165
- mRegistered = true ;
197
+ RegisterMetric (event.key (), event.ValueType ());
166
198
}
167
199
168
- using ValueType = MetricEvent::Value::Type;
169
200
switch (event.ValueType ())
170
201
{
171
202
case ValueType::kInt32 :
172
203
ESP_LOGI (" mtr" , " The value of %s is %ld " , event.key (), event.ValueInt32 ());
173
204
esp_diag_metrics_add_int (event.key (), event.ValueInt32 ());
174
205
break ;
206
+
175
207
case ValueType::kUInt32 :
176
208
ESP_LOGI (" mtr" , " The value of %s is %lu " , event.key (), event.ValueUInt32 ());
177
209
esp_diag_metrics_add_uint (event.key (), event.ValueUInt32 ());
178
210
break ;
211
+
179
212
case ValueType::kChipErrorCode :
180
213
ESP_LOGI (" mtr" , " The value of %s is error with code %lu " , event.key (), event.ValueErrorCode ());
181
214
esp_diag_metrics_add_uint (event.key (), event.ValueErrorCode ());
182
215
break ;
216
+
183
217
case ValueType::kUndefined :
184
218
ESP_LOGI (" mtr" , " The value of %s is undefined" , event.key ());
185
219
break ;
220
+
186
221
default :
187
222
ESP_LOGI (" mtr" , " The value of %s is of an UNKNOWN TYPE" , event.key ());
188
223
break ;
@@ -211,6 +246,7 @@ void ESP32Backend::TraceInstant(const char * label, const char * group)
211
246
{
212
247
ESP_DIAG_EVENT (" MTR_TRC" , " Instant : %s -%s" , label, group);
213
248
}
249
+
214
250
} // namespace Insights
215
251
} // namespace Tracing
216
252
} // namespace chip
0 commit comments