From ec33f8c52a27915dc39cd65af324d98011f91afa Mon Sep 17 00:00:00 2001 From: Odboy Date: Mon, 22 Jun 2026 21:14:27 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AE=A2=E6=88=B7=E7=AB=AF=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E6=89=93=E5=8D=B0=E5=8F=98=E6=9B=B4=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=EF=BC=8C=E4=BF=AE=E5=A4=8D=20Node.js=20Docke?= =?UTF-8?q?rfile=20=E5=92=8C=20ConfigList=20=E9=A1=B5=E9=9D=A2=E5=B8=83?= =?UTF-8?q?=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 各客户端 deleted/changed 日志增加具体配置名称输出 - Node.js Dockerfile 改为单阶段构建,修复依赖找不到问题 - ConfigList.vue 查询条件拆分为独立卡片,新增查询/重置按钮 - Node.js 客户端日志统一使用 console.error --- Dockerfile.nodejs | 27 +++----------- kenaito-conf-go-client/client.go | 8 +++- kenaito-conf-nodejs-client-demo/app.js | 6 +-- kenaito-conf-nodejs-client/lib/client.js | 8 ++-- .../kenaito_conf/client.py | 4 +- .../InternalConfigChangeListener.java | 2 +- web/src/views/config/ConfigList.vue | 37 ++++++++++++++----- 7 files changed, 50 insertions(+), 42 deletions(-) diff --git a/Dockerfile.nodejs b/Dockerfile.nodejs index f8c37fb..f4d3ced 100644 --- a/Dockerfile.nodejs +++ b/Dockerfile.nodejs @@ -1,27 +1,12 @@ -# Build stage -FROM node:18-alpine AS build - -WORKDIR /src - -# Copy client library -COPY kenaito-conf-nodejs-client/ ./kenaito-conf-nodejs-client/ - -# Copy demo project -COPY kenaito-conf-nodejs-client-demo/ ./kenaito-conf-nodejs-client-demo/ - -# Install client locally, then demo dependencies -WORKDIR /src/kenaito-conf-nodejs-client -RUN npm link - -WORKDIR /src/kenaito-conf-nodejs-client-demo -RUN npm link kenaito-conf && npm install - -# Runtime stage FROM node:18-alpine WORKDIR /app -COPY --from=build /src/kenaito-conf-nodejs-client-demo . + +COPY kenaito-conf-nodejs-client/ ./kenaito-conf-nodejs-client/ +COPY kenaito-conf-nodejs-client-demo/ ./kenaito-conf-nodejs-client-demo/ + +WORKDIR /app/kenaito-conf-nodejs-client-demo +RUN npm install ../kenaito-conf-nodejs-client && npm install EXPOSE 8083 - CMD ["node", "app.js"] diff --git a/kenaito-conf-go-client/client.go b/kenaito-conf-go-client/client.go index b25aabc..eabc3b8 100644 --- a/kenaito-conf-go-client/client.go +++ b/kenaito-conf-go-client/client.go @@ -231,7 +231,7 @@ func (c *Client) fetchChanged() error { delete(c.configs, key) } c.mu.Unlock() - log.Printf("[ConfigClient] %d configs deleted", len(deletedKeys)) + log.Printf("[ConfigClient] %d configs deleted: %s", len(deletedKeys), strings.Join(deletedKeys, ", ")) delete(wrapper.Data, "deletedKeys") } @@ -250,7 +250,11 @@ func (c *Client) fetchChanged() error { // notify listeners c.listener.Notify(changed) - log.Printf("[ConfigClient] %d configs changed", len(changed)) + changedKeys := make([]string, 0, len(changed)) + for k := range changed { + changedKeys = append(changedKeys, k) + } + log.Printf("[ConfigClient] %d configs changed: %s", len(changed), strings.Join(changedKeys, ", ")) } return nil diff --git a/kenaito-conf-nodejs-client-demo/app.js b/kenaito-conf-nodejs-client-demo/app.js index 18ff582..39bc894 100644 --- a/kenaito-conf-nodejs-client-demo/app.js +++ b/kenaito-conf-nodejs-client-demo/app.js @@ -15,7 +15,7 @@ function onConfigChanged(changed) { for (const [k, v] of Object.entries(changed)) { if (k in configValues) { configValues[k] = v; - console.log(`config updated: ${k} = ${v}`); + console.error(`config updated: ${k} = ${v}`); } } } @@ -57,13 +57,13 @@ async function main() { configValues[k] = remote[k]; } } - console.info(`loaded ${Object.keys(remote).length} configs from remote`); + console.error(`loaded ${Object.keys(remote).length} configs from remote`); } catch (err) { console.error('failed to init config client, using local defaults:', err); } app.listen(port, '0.0.0.0', () => { - console.info(`server started on port ${port}`); + console.error(`server started on port ${port}`); }); } diff --git a/kenaito-conf-nodejs-client/lib/client.js b/kenaito-conf-nodejs-client/lib/client.js index 0b5849c..2d4aca5 100644 --- a/kenaito-conf-nodejs-client/lib/client.js +++ b/kenaito-conf-nodejs-client/lib/client.js @@ -38,7 +38,7 @@ export class ConfigClient { const cached = this.cache.read(); if (cached) { this.applyConfigs(cached); - console.info('[ConfigClient] loaded', Object.keys(this.configs).length, 'configs from cache'); + console.error('[ConfigClient] loaded', Object.keys(this.configs).length, 'configs from cache'); } else { throw new Error(`fetch configs failed and no cache: ${err.message}`); } @@ -90,7 +90,7 @@ export class ConfigClient { this.cache.write(data); this.applyConfigs(data); - console.info('[ConfigClient] fetched', Object.keys(this.configs).length, 'configs'); + console.error('[ConfigClient] fetched', Object.keys(this.configs).length, 'configs'); } async fetchChanged() { @@ -134,7 +134,7 @@ export class ConfigClient { for (const key of deletedKeys) { delete this.configs[key]; } - console.info('[ConfigClient]', deletedKeys.length, 'configs deleted'); + console.error('[ConfigClient]', deletedKeys.length, 'configs deleted:', deletedKeys.join(', ')); delete changedData['deletedKeys']; } @@ -145,7 +145,7 @@ export class ConfigClient { Object.assign(this.configs, changed); this.listener.notify(changed); - console.info('[ConfigClient]', Object.keys(changed).length, 'configs changed'); + console.error('[ConfigClient]', Object.keys(changed).length, 'configs changed:', Object.keys(changed).join(', ')); } applyConfigs(data) { diff --git a/kenaito-conf-python-client/kenaito_conf/client.py b/kenaito-conf-python-client/kenaito_conf/client.py index ca4ed60..47e8852 100644 --- a/kenaito-conf-python-client/kenaito_conf/client.py +++ b/kenaito-conf-python-client/kenaito_conf/client.py @@ -110,7 +110,7 @@ class ConfigClient: with self._lock: for key in deleted_keys: self._configs.pop(key, None) - logger.info("[ConfigClient] %d configs deleted", len(deleted_keys)) + logger.info("[ConfigClient] %d configs deleted: %s", len(deleted_keys), ", ".join(deleted_keys)) if changed_data: changed = {} @@ -121,7 +121,7 @@ class ConfigClient: self._configs.update(changed) self._listener.notify(changed) - logger.info("[ConfigClient] %d configs changed", len(changed)) + logger.info("[ConfigClient] %d configs changed: %s", len(changed), ", ".join(changed.keys())) def _apply_configs(self, data: dict) -> None: with self._lock: diff --git a/kenaito-conf-springboot2-client/src/main/java/cn/odboy/confcenter/InternalConfigChangeListener.java b/kenaito-conf-springboot2-client/src/main/java/cn/odboy/confcenter/InternalConfigChangeListener.java index 590fcec..a35d670 100644 --- a/kenaito-conf-springboot2-client/src/main/java/cn/odboy/confcenter/InternalConfigChangeListener.java +++ b/kenaito-conf-springboot2-client/src/main/java/cn/odboy/confcenter/InternalConfigChangeListener.java @@ -69,7 +69,7 @@ public class InternalConfigChangeListener { if (deletedKeysStr != null && !deletedKeysStr.isEmpty()) { String[] deletedKeys = deletedKeysStr.split(","); context.removeConfigs(java.util.Arrays.asList(deletedKeys)); - logger.info("[ConfigClient] {} configs deleted", deletedKeys.length); + logger.info("[ConfigClient] {} configs deleted: {}", deletedKeys.length, String.join(", ", deletedKeys)); } } if (!data.isEmpty()) context.updateConfig(data); diff --git a/web/src/views/config/ConfigList.vue b/web/src/views/config/ConfigList.vue index dcbd042..e8f6986 100644 --- a/web/src/views/config/ConfigList.vue +++ b/web/src/views/config/ConfigList.vue @@ -1,15 +1,24 @@