8000 feat: improve logging to capture also log messages without js context · marcelkottmann/esp32-javascript@117c01a · GitHub
[go: up one dir, main page]

Skip to content

Commit 117c01a

Browse files
feat: improve logging to capture also log messages without js context
1 parent c57ab88 commit 117c01a

File tree

15 files changed

+628
-139
lines changed

15 files changed

+628
-139
lines changed

components/esp32-javascript/esp32-javascript.c

+68-35
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@ void fileLog(duk_context *ctx, log_level_t level, char *message)
8585

8686
void jslog(log_level_t level, const char *msg, ...)
8787
{
88+
if (level < (5 - LOG_LOCAL_LEVEL))
89+
{
90+
return;
91+
}
92+
8893
char *my_string;
8994
va_list argp;
9095

@@ -115,25 +120,21 @@ void jslog(log_level_t level, const char *msg, ...)
115120
duk_eval(ctx); /* -> [ ... func ] */
116121
duk_push_string(ctx, my_string);
117122
duk_call(ctx, 1);
123+
//clear stack
124+
duk_pop(ctx);
118125
}
119126
else
120127
{
121-
if (level == DEBUG)
122-
{
123-
ESP_LOGD(tag, "No ctx present: %s", my_string);
124-
}
125-
else if (level == INFO)
126-
{
127-
ESP_LOGI(tag, "No ctx present: %s", my_string);
128-
}
129-
else if (level == WARN)
130-
{
131-
ESP_LOGW(tag, "No ctx present: %s", my_string);
132-
}
133-
else
134-
{
135-
ESP_LOGE(tag, "No ctx present: %s", my_string);
136-
}
128+
char *message = malloc(strlen(my_string) + 1);
129+
strcpy(message, my_string);
130+
131+
js_event_t event;
132+
js_eventlist_t events;
133+
events.events_len = 0;
134+
135+
el_create_event(&event, EL_LOG_EVENT_TYPE, level, message);
136+
el_add_event(&events, &event);
137+
el_fire_events(&events);
137138
}
138139
free(my_string);
139140
}
@@ -171,7 +172,7 @@ void IRAM_ATTR el_add_event(js_eventlist_t *events, js_event_t *event)
171172
{
172173
if (events->events_len >= MAX_EVENTS)
173174
{
174-
jslog(ERROR, "Event queue full. Max event number: %d => aborting.", MAX_EVENTS);
175+
ESP_LOGE(tag, "Event list is full. Max event list size: %d => aborting.", MAX_EVENTS);
175176
abort();
176177
}
177178
events->events[events->events_len] = *event;
@@ -182,17 +183,28 @@ void IRAM_ATTR el_fire_events(js_eventlist_t *events)
182183
{
183184
if (DISABLE_EVENTS)
184185
{
185-
jslog(WARN, "Events are disabled. They will never be fired.");
186+
ESP_LOGW(tag, "Events are disabled. They will never be fired.");
186187
}
187188
else
188189
{
189190
if (events->events_len > 0)
190191
{
191-
jslog(DEBUG, "Send %d events to queue...", events->events_len);
192+
ESP_LOGD(tag, "Send %d events to queue...", events->events_len);
192193
int ret = xQueueSendFromISR(el_event_queue, events, NULL);
193194
if (ret != pdTRUE)
194195
{
195-
jslog(ERROR, "Event queue is full... is something blocking the event loop?...aborting.");
196+
ESP_LOGE(tag, "Event queue is full... is something blocking the event loop?...aborting.");
197+
js_eventlist_t devents;
198+
int num = 0;
199+
while (xQueueReceive(el_event_queue, &devents, 0))
200+
{
201+
for (int i = 0; i < devents.events_len; i++)
202+
{
203+
ESP_LOGE(tag, "Events num %i, event idx %i, type %i, status %i", num, i, devents.events[i].type, devents.events[i].status);
204+
}
205+
num++;
206+
}
207+
196208
abort();
197209
}
198210
}
@@ -401,26 +413,30 @@ static duk_ret_t el_suspend(duk_context *ctx)
401413
js_eventlist_t events;
402414

403415
jslog(DEBUG, "Waiting for events...");
404-
405-
xQueueReceive(el_event_queue, &events, portMAX_DELAY);
406-
407-
jslog(DEBUG, "Receiving %d events.", events.events_len);
408-
409416
int arr_idx = duk_push_array(ctx);
410-
for (int i = 0; i < events.events_len; i++)
417+
int arrsize = 0;
418+
TickType_t timeout = portMAX_DELAY;
419+
while (xQueueReceive(el_event_queue, &events, timeout) == pdTRUE)
411420
{
412-
duk_idx_t obj_idx = duk_push_object(ctx);
421+
timeout = 0; // set timeout to 0 to not wait in while loop if there are no more events available
422+
for (int i = 0; i < events.events_len; i++)
423+
{
424+
duk_idx_t obj_idx = duk_push_object(ctx);
413425

414-
duk_push_int(ctx, events.events[i].type);
415-
duk_put_prop_string(ctx, obj_idx, "type");
416-
duk_push_int(ctx, events.events[i].status);
417-
duk_put_prop_string(ctx, obj_idx, "status");
418-
duk_push_int(ctx, (int)events.events[i].fd);
419-
duk_put_prop_string(ctx, obj_idx, "fd");
426+
duk_push_int(ctx, events.events[i].type);
427+
duk_put_prop_string(ctx, obj_idx, "type");
428+
duk_push_int(ctx, events.events[i].status);
429+
duk_put_prop_string(ctx, obj_idx, "status");
430+
duk_push_int(ctx, (int)events.events[i].fd);
431+
duk_put_prop_string(ctx, obj_idx, "fd");
420432

421-
duk_put_prop_index(ctx, arr_idx, i);
433+
duk_put_prop_index(ctx, arr_idx, arrsize);
434+
arrsize++;
435+
}
422436
}
423437

438+
jslog(DEBUG, "Received %d events.", arrsize);
439+
424440
return 1;
425441
}
426442

@@ -788,6 +804,14 @@ duk_ret_t el_partition_write(duk_context *ctx)
788804
}
789805
}
790806

807+
duk_ret_t el_readAndFreeString(duk_context *ctx)
808+
{
809+
char *str = duk_to_int(ctx, 0);
810+
duk_push_string(ctx, str);
811+
free(str);
812+
return 1;
813+
}
814+
791815
void duktape_task(void *ignore)
792816
{
793817
spiramAvailable = spiramAvail();
@@ -901,6 +925,15 @@ void duktape_task(void *ignore)
901925
duk_push_c_function(ctx, el_find_partition, 1 /*nargs*/);
902926
duk_put_global_string(ctx, "el_find_partition");
903927

928+
duk_push_int(ctx, EL_TIMER_EVENT_TYPE);
929+
duk_put_global_string(ctx, "EL_TIMER_EVENT_TYPE");
930+
931+
duk_push_int(ctx, EL_LOG_EVENT_TYPE);
932+
duk_put_global_string(ctx, "EL_LOG_EVENT_TYPE");
933+
934+
duk_push_c_function(ctx, el_readAndFreeString, 1 /*nargs*/);
935+
duk_put_global_string(ctx, "el_readAndFreeString");
936+
904937
loadUrlPolyfill(ctx);
905 D63B 938

906939
#define ESP32_JAVASCRIPT_EXTERN ESP32_JAVASCRIPT_EXTERN_REGISTER
@@ -924,7 +957,7 @@ int esp32_javascript_init()
924957
esp_log_level_set("*", ESP_LOG_ERROR);
925958
esp_log_level_set("wifi", ESP_LOG_WARN);
926959
esp_log_level_set("dhcpc", ESP_LOG_WARN);
927-
esp_log_level_set(tag, ESP_LOG_DEBUG);
960+
esp_log_level_set(tag, LOG_LOCAL_LEVEL);
928961

929962
nvs_flash_init();
930963
tcpip_adapter_init();

components/esp32-javascript/include/esp32-javascript.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ extern "C"
4444
void *fd;
4545
} js_event_t;
4646

47-
#define MAX_EVENTS 4
47+
#define MAX_EVENTS 8
4848
typedef struct
4949
{
5050
js_event_t events[MAX_EVENTS];

0 commit comments

Comments
 (0)
0