Author: Andy Green Date: Wed Oct 01 09:22:01 2025 +0100 notification: add sec diff --git a/assets/coverity.svg b/assets/coverity.svg new file mode 100644 index 0000000..21aabcf --- /dev/null +++ b/assets/coverity.svg @@ -0,0 +1,18 @@ + + + + diff --git a/assets/locked.svg b/assets/locked.svg new file mode 100644 index 0000000..222aec9 --- /dev/null +++ b/assets/locked.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + diff --git a/assets/sai.css b/assets/sai.css index 3165758..9132e3c 100644 --- a/assets/sai.css +++ b/assets/sai.css @@ -231,7 +231,7 @@ div.nailed { div.undernailed { position:relative; top: 0px; - margin-left: 180px; + margin-left: 8px; } diff --git a/assets/sai.js b/assets/sai.js index cd314b2..9910f50 100644 --- a/assets/sai.js +++ b/assets/sai.js @@ -850,8 +850,10 @@ function sai_event_summary_render(o, now_ut, reset_all_icon) s += "" + "
" + - "" + san(e.repo_name) + - "
"; + "" + san(e.repo_name); + if (e.sec) + s += " "; + s += "
"; if (e.ref.substr(0, 11) === "refs/heads/") { s += "" + diff --git a/assets/x86_64.svg b/assets/x86_64.svg new file mode 100644 index 0000000..39eaa23 --- /dev/null +++ b/assets/x86_64.svg @@ -0,0 +1 @@ + diff --git a/src/common/include/private.h b/src/common/include/private.h index ae8d062..2f08956 100644 --- a/src/common/include/private.h +++ b/src/common/include/private.h @@ -123,7 +123,7 @@ typedef struct { char art_down_nonce[33]; char uuid[65]; char builder_name[96]; - char cpack[128]; + char cpack[512]; char script[4096]; char branches[256]; @@ -281,6 +281,7 @@ typedef struct sai_event { uint64_t last_updated; sai_event_state_t state; int uid; + int sec; } sai_event_t; typedef struct { @@ -582,7 +583,7 @@ extern const lws_struct_map_t lsm_schema_sq3_map_artifact[1], lsm_schema_map_ta[1], lsm_schema_map_plat_simple[1], - lsm_event[10], + lsm_event[11], lsm_task[29], lsm_log[7], lsm_artifact[8], diff --git a/src/common/struct-metadata.c b/src/common/struct-metadata.c index 9ad8618..0579b61 100644 --- a/src/common/struct-metadata.c +++ b/src/common/struct-metadata.c @@ -143,6 +143,7 @@ const lws_struct_map_t lsm_event[] = { LSM_UNSIGNED (sai_event_t, created, "created"), LSM_UNSIGNED (sai_event_t, state, "state"), LSM_UNSIGNED (sai_event_t, last_updated, "last_updated"), + LSM_UNSIGNED (sai_event_t, sec, "sec"), }; const lws_struct_map_t lsm_schema_json_map_event[] = { diff --git a/src/power/p-comms.c b/src/power/p-comms.c index b6523ba..cf5633a 100644 --- a/src/power/p-comms.c +++ b/src/power/p-comms.c @@ -163,7 +163,9 @@ saip_m_rx(void *userobj, const uint8_t *buf, size_t len, int flags) saip_server_plat_t *sp = lws_container_of(px, saip_server_plat_t, list); sp->needed = 0; } lws_end_foreach_dll(px); - + + fprintf(stderr, "|||||||||||||||||||||||||||||||| Server says needed: '%.*s'\n", (int)len, buf); + while (p < end) { n = 0; while (p < end && *p != ',') diff --git a/src/server/s-notification.c b/src/server/s-notification.c index cd473d6..04ffcc5 100644 --- a/src/server/s-notification.c +++ b/src/server/s-notification.c @@ -41,6 +41,7 @@ static const char * const paths[] = { "nonce", "saifile_len", "saifile", + "sec", }; enum enum_paths { @@ -53,6 +54,7 @@ enum enum_paths { LEJPN_NONCE, LEJPN_SAIFILE_LEN, LEJPN_SAIFILE, + LEJPN_SEC, }; /* @@ -687,10 +689,10 @@ next_plat: ; if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; -// if (reason != LEJPCB_VAL_STR_END) -// return 0; - - /* only the end part of the string, where we know the length */ + /* + * Some of these will be long strings, accept all the string parts + * and accumilate them + */ switch (ctx->path_match - 1) { case LEJPNSAIF_SCHEMA: @@ -737,7 +739,10 @@ next_plat: ; break; case LEJPNSAIF_CONFIGURATIONS_CPACK: - lws_strncpy(sn->t.cpack, ctx->buf, sizeof(sn->t.cpack)); + n = strlen(sn->t.cpack); + if (n < sizeof(sn->t.cpack) - 2) + lws_strnncpy(sn->t.cpack + n, ctx->buf, ctx->npos, + sizeof(sn->t.cpack) - n); break; case LEJPNSAIF_CONFIGURATIONS_BRANCHES: @@ -830,6 +835,10 @@ sai_notification_lejp_cb(struct lejp_ctx *ctx, char reason) lws_strncpy(sn->e.ref, ctx->buf, sizeof(sn->e.ref)); break; + case LEJPN_SEC: + sn->e.sec = 1; + break; + case LEJPN_HASH: lws_strncpy(sn->e.hash, ctx->buf, sizeof(sn->e.hash)); break; diff --git a/src/server/s-task.c b/src/server/s-task.c index 7aa06be..88dfada 100644 --- a/src/server/s-task.c +++ b/src/server/s-task.c @@ -567,6 +567,8 @@ sais_find_or_add_pending_plat(struct vhd *vhd, const char *name) } lws_end_foreach_dll(p); + // lwsl_notice("%s: ->->->->-> adding %s\n", __func__, name); + /* platform name is new, make an entry in the ac */ sp = lwsac_use_zero(&vhd->ac_plats, sizeof(sais_plat_t) + strlen(name) + 1, 512); diff --git a/src/server/s-ws-builder.c b/src/server/s-ws-builder.c index c02b6d3..7c73c38 100644 --- a/src/server/s-ws-builder.c +++ b/src/server/s-ws-builder.c @@ -707,11 +707,11 @@ bail: case SAIM_WSSCH_BUILDER_LOADREPORT: { - sai_load_report_t *lr = (sai_load_report_t *)pss->a.dest; +// sai_load_report_t *lr = (sai_load_report_t *)pss->a.dest; - lwsl_notice("%s: @@@@@@@@@@@@@@@@@@ loadreport from %s: ram %uk, disk %uk\n", - __func__, lr->builder_name, lr->reserved_ram_kib, - lr->reserved_disk_kib); +// lwsl_notice("%s: @@@@@@@@@@@@@@@@@@ loadreport from %s: ram %uk, disk %uk\n", +// __func__, lr->builder_name, lr->reserved_ram_kib, +// lr->reserved_disk_kib); ssize_t wr = write(2, buf, bl); if (wr != (ssize_t)bl) diff --git a/src/web/CMakeLists.txt b/src/web/CMakeLists.txt index b132dfb..5035616 100644 --- a/src/web/CMakeLists.txt +++ b/src/web/CMakeLists.txt @@ -75,6 +75,8 @@ if (requirements) ../../assets/delete.png ../../assets/passed.svg ../../assets/failed.svg + ../../assets/locked.svg + ../../assets/coverity.svg ../../assets/sai.css ../../assets/sai.js ../../assets/sai.svg @@ -98,6 +100,7 @@ if (requirements) ../../assets/arch-riscv64.svg ../../assets/arch-risc-v.svg ../../assets/arch-x86_64-amd.svg + ../../assets/x86_64.svg ../../assets/arch-x86_64-intel-i3.svg ../../assets/arch-x86_64-intel.svg ../../assets/arch-xl6-esp32.svg diff --git a/src/web/w-websrv.c b/src/web/w-websrv.c index 8161887..d6abdc5 100644 --- a/src/web/w-websrv.c +++ b/src/web/w-websrv.c @@ -224,8 +224,8 @@ saiw_lp_rx(void *userobj, const uint8_t *buf, size_t len, int flags) break; case SAIS_WS_WEBSRV_RX_LOADREPORT: - lwsl_notice("%s: ^^^^^^^^^^^^^^ SAIS_WS_WEBSRV_RX_LOADREPORT forwarding to browser\n", __func__); - lwsl_hexdump_notice(buf, len); + // lwsl_notice("%s: ^^^^^^^^^^^^^^ SAIS_WS_WEBSRV_RX_LOADREPORT forwarding to browser\n", __func__); + // lwsl_hexdump_notice(buf, len); saiw_ws_broadcast_raw(vhd, buf, len - (unsigned int)n, 0, lws_write_ws_flags(LWS_WRITE_TEXT, flags & LWSSS_FLAG_SOM, flags & LWSSS_FLAG_EOM)); break; diff --git a/src/web/w-ws-browser.c b/src/web/w-ws-browser.c index cbccfa3..35e6c25 100644 --- a/src/web/w-ws-browser.c +++ b/src/web/w-ws-browser.c @@ -208,7 +208,7 @@ static int saiw_pss_schedule_eventinfo(struct pss *pss, const char *event_uuid) { saiw_scheduled_t *sch = saiw_alloc_sched(pss, WSS_PREPARE_OVERVIEW); - char qu[80], esc[66], esc2[96]; + char qu[180], esc[66], esc2[96]; int n; if (!sch) @@ -328,6 +328,8 @@ saiw_pss_schedule_taskinfo(struct pss *pss, const char *task_uuid, int logsub) lws_sql_purify(esc2, pss->specific_project, sizeof(esc2)); m += lws_snprintf(qu + m, sizeof(qu) - (unsigned int)m, " and repo_name='%s'", esc2); } + if (!pss->authorized) + m += lws_snprintf(qu + m, sizeof(qu) - (unsigned int)m, " and sec=0"); if (pss->specific_ref[0] && pss->specificity != SAIM_SPECIFIC_TASK) { lws_sql_purify(esc2, pss->specific_ref, sizeof(esc2)); @@ -875,6 +877,9 @@ again: lws_sql_purify(esc, pss->specific_project, sizeof(esc) - 1); lws_snprintf(filt, sizeof(filt), " and repo_name=\"%s\"", esc); } + if (!pss->authorized) + lws_snprintf(filt + strlen(filt), sizeof(filt) - strlen(filt), " and sec=0"); + pss->wants_event_updates = 1; if (!sch->ov_db_done && lws_struct_sq3_deserialize(vhd->pdb, filt[0] ? filt : NULL, "created ", @@ -915,6 +920,9 @@ again: * additional controls clientside. The events the controls * cause if used are separately checked for coming from an * authorized pss when they are received. + * + * If you're not authorized, you're only going to see events + * that have sec=0. Otherwise you can see all events. */ if (pss->specificity) @@ -1262,6 +1270,9 @@ b_finish: lws_snprintf(filt, sizeof(filt), " and (task_uuid == '%s')", sch->one_task->uuid); + // if (!pss->authorized) + // lws_snprintf(filt + strlen(filt), sizeof(filt) - strlen(filt), " and sec=0"); + // lwsl_debug("%s: ---------------- %s\n", __func__, filt); if (lws_struct_sq3_deserialize(pdb, filt, NULL,