@serve.zone/dcrouter 7.1.0 → 7.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -29844,21 +29844,14 @@ ${JSON.stringify(a.details,null,2)}
29844
29844
  }
29845
29845
  `]),Oe(Pt,1,u2);pe();var qwt,Vwt,jwt,Uwt,Wwt,Gwt,ka,hU,fU,mU,gU;Gwt=[de("ops-view-logs")];var Li=class extends(Wwt=ye,Uwt=[K()],jwt=[K()],Vwt=[K()],qwt=[K()],Wwt){constructor(){super();St(this,hU,Oe(ka,8,this,{recentLogs:[],isStreaming:!1,filters:{}})),Oe(ka,11,this);St(this,fU,Oe(ka,12,this)),Oe(ka,15,this);St(this,mU,Oe(ka,16,this)),Oe(ka,19,this);St(this,gU,Oe(ka,20,this,100)),Oe(ka,23,this);let a=y4.select(i=>i).subscribe(i=>{this.logState=i});this.rxSubscriptions.push(a)}render(){return w`
29846
29846
  <ops-sectionheading>Logs</ops-sectionheading>
29847
-
29847
+
29848
29848
  <div class="controls">
29849
29849
  <div class="filterGroup">
29850
- <dees-button
29850
+ <dees-button
29851
29851
  @click=${()=>this.fetchLogs()}
29852
29852
  >
29853
29853
  Refresh Logs
29854
29854
  </dees-button>
29855
-
29856
- <dees-button
29857
- @click=${()=>this.toggleStreaming()}
29858
- .type=${this.logState.isStreaming?"highlighted":"normal"}
29859
- >
29860
- ${this.logState.isStreaming?"Stop Streaming":"Start Streaming"}
29861
- </dees-button>
29862
29855
  </div>
29863
29856
 
29864
29857
  <div class="filterGroup">
@@ -29889,19 +29882,13 @@ ${JSON.stringify(a.details,null,2)}
29889
29882
  </div>
29890
29883
  </div>
29891
29884
 
29892
- <div class="logContainer">
29893
- ${this.logState.recentLogs.length>0?this.logState.recentLogs.map(a=>w`
29894
- <div class="logEntry">
29895
- <span class="logTimestamp">${new Date(a.timestamp).toLocaleTimeString()}</span>
29896
- <span class="logLevel ${a.level}">${a.level.toUpperCase()}</span>
29897
- <span class="logCategory">[${a.category}]</span>
29898
- <span class="logMessage">${a.message}</span>
29899
- </div>
29900
- `):w`
29901
- <div class="noLogs">No logs to display</div>
29902
- `}
29903
- </div>
29904
- `}async connectedCallback(){super.connectedCallback(),this.fetchLogs()}async fetchLogs(){await y4.dispatchAction(Dw,{limit:this.filterLimit,level:this.filterLevel,category:this.filterCategory})}updateFilter(a,i){let r=i==="all"?void 0:i;switch(a){case"level":this.filterLevel=r;break;case"category":this.filterCategory=r;break;case"limit":this.filterLimit=r?parseInt(r,10):100;break}this.fetchLogs()}getActiveFilters(){return{level:this.filterLevel,category:this.filterCategory,limit:this.filterLimit}}toggleStreaming(){console.log("Streaming toggle not yet implemented")}};ka=G1(Wwt),hU=new WeakMap,fU=new WeakMap,mU=new WeakMap,gU=new WeakMap,ct(ka,4,"logState",Uwt,Li,hU),ct(ka,4,"filterLevel",jwt,Li,fU),ct(ka,4,"filterCategory",Vwt,Li,mU),ct(ka,4,"filterLimit",qwt,Li,gU),Li=ct(ka,0,"OpsViewLogs",Gwt,Li),l1(Li,"styles",[p.defaultStyles,ra,X`
29885
+ <dees-chart-log
29886
+ .label=${"Application Logs"}
29887
+ .autoScroll=${!0}
29888
+ .maxEntries=${2e3}
29889
+ .showMetrics=${!0}
29890
+ ></dees-chart-log>
29891
+ `}async connectedCallback(){super.connectedCallback(),this.fetchLogs()}async updated(a){super.updated(a),a.has("logState")&&this.pushLogsToChart()}async pushLogsToChart(){let a=this.shadowRoot?.querySelector("dees-chart-log");if(!a)return;await a.updateComplete,a.clearLogs();let i=this.getMappedLogEntries();i.length>0&&a.updateLog(i)}getMappedLogEntries(){return this.logState.recentLogs.map(a=>({timestamp:new Date(a.timestamp).toISOString(),level:a.level,message:a.message,source:a.category}))}async fetchLogs(){await y4.dispatchAction(Dw,{limit:this.filterLimit,level:this.filterLevel,category:this.filterCategory})}updateFilter(a,i){let r=i==="all"?void 0:i;switch(a){case"level":this.filterLevel=r;break;case"category":this.filterCategory=r;break;case"limit":this.filterLimit=r?parseInt(r,10):100;break}this.fetchLogs()}};ka=G1(Wwt),hU=new WeakMap,fU=new WeakMap,mU=new WeakMap,gU=new WeakMap,ct(ka,4,"logState",Uwt,Li,hU),ct(ka,4,"filterLevel",jwt,Li,fU),ct(ka,4,"filterCategory",Vwt,Li,mU),ct(ka,4,"filterLimit",qwt,Li,gU),Li=ct(ka,0,"OpsViewLogs",Gwt,Li),l1(Li,"styles",[p.defaultStyles,ra,X`
29905
29892
  .controls {
29906
29893
  display: flex;
29907
29894
  gap: 16px;
@@ -29914,66 +29901,6 @@ ${JSON.stringify(a.details,null,2)}
29914
29901
  align-items: center;
29915
29902
  gap: 8px;
29916
29903
  }
29917
-
29918
- .logContainer {
29919
- background: ${p.bdTheme("#f8f9fa","#1e1e1e")};
29920
- border-radius: 8px;
29921
- padding: 16px;
29922
- max-height: 600px;
29923
- overflow-y: auto;
29924
- font-family: 'Consolas', 'Monaco', monospace;
29925
- font-size: 13px;
29926
- }
29927
-
29928
- .logEntry {
29929
- margin-bottom: 8px;
29930
- line-height: 1.5;
29931
- }
29932
-
29933
- .logTimestamp {
29934
- color: ${p.bdTheme("#7a7a7a","#7a7a7a")};
29935
- margin-right: 8px;
29936
- }
29937
-
29938
- .logLevel {
29939
- font-weight: bold;
29940
- margin-right: 8px;
29941
- padding: 2px 6px;
29942
- border-radius: 3px;
29943
- font-size: 11px;
29944
- }
29945
-
29946
- .logLevel.debug {
29947
- color: ${p.bdTheme("#6a9955","#6a9955")};
29948
- background: ${p.bdTheme("rgba(106, 153, 85, 0.1)","rgba(106, 153, 85, 0.1)")};
29949
- }
29950
- .logLevel.info {
29951
- color: ${p.bdTheme("#569cd6","#569cd6")};
29952
- background: ${p.bdTheme("rgba(86, 156, 214, 0.1)","rgba(86, 156, 214, 0.1)")};
29953
- }
29954
- .logLevel.warn {
29955
- color: ${p.bdTheme("#ce9178","#ce9178")};
29956
- background: ${p.bdTheme("rgba(206, 145, 120, 0.1)","rgba(206, 145, 120, 0.1)")};
29957
- }
29958
- .logLevel.error {
29959
- color: ${p.bdTheme("#f44747","#f44747")};
29960
- background: ${p.bdTheme("rgba(244, 71, 71, 0.1)","rgba(244, 71, 71, 0.1)")};
29961
- }
29962
-
29963
- .logCategory {
29964
- color: ${p.bdTheme("#c586c0","#c586c0")};
29965
- margin-right: 8px;
29966
- }
29967
-
29968
- .logMessage {
29969
- color: ${p.bdTheme("#333","#d4d4d4")};
29970
- }
29971
-
29972
- .noLogs {
29973
- color: ${p.bdTheme("#7a7a7a","#7a7a7a")};
29974
- text-align: center;
29975
- padding: 40px;
29976
- }
29977
29904
  `]),Oe(ka,1,Li);pe();var Ywt,Zwt,Xwt,Kl,bU;Xwt=[de("ops-view-config")];var en=class extends(Zwt=ye,Ywt=[K()],Zwt){constructor(){super();St(this,bU,Oe(Kl,8,this,{config:null,isLoading:!1,error:null})),Oe(Kl,11,this);let a=Yr.select(i=>i).subscribe(i=>{this.configState=i});this.rxSubscriptions.push(a)}render(){return w`
29978
29905
  <ops-sectionheading>Configuration</ops-sectionheading>
29979
29906
 
@@ -30914,4 +30841,4 @@ ibantools/jsnext/ibantools.js:
30914
30841
  * @preferred
30915
30842
  *)
30916
30843
  */
30917
- //# sourceMappingURL=bundle-1771521842586.js.map
30844
+ //# sourceMappingURL=bundle-1771592139231.js.map
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '7.1.0',
6
+ version: '7.2.0',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDBFQUEwRTtDQUN4RixDQUFBIn0=
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '7.1.0',
6
+ version: '7.2.0',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsc0JBQXNCO0lBQzVCLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFdBQVcsRUFBRSwwRUFBMEU7Q0FDeEYsQ0FBQSJ9
@@ -10,8 +10,9 @@ export declare class OpsViewLogs extends DeesElement {
10
10
  static styles: plugins.deesElement.CSSResult[];
11
11
  render(): plugins.deesElement.TemplateResult<1>;
12
12
  connectedCallback(): Promise<void>;
13
+ updated(changedProperties: Map<string, any>): Promise<void>;
14
+ private pushLogsToChart;
15
+ private getMappedLogEntries;
13
16
  private fetchLogs;
14
17
  private updateFilter;
15
- private getActiveFilters;
16
- private toggleStreaming;
17
18
  }
@@ -112,86 +112,19 @@ let OpsViewLogs = (() => {
112
112
  align-items: center;
113
113
  gap: 8px;
114
114
  }
115
-
116
- .logContainer {
117
- background: ${cssManager.bdTheme('#f8f9fa', '#1e1e1e')};
118
- border-radius: 8px;
119
- padding: 16px;
120
- max-height: 600px;
121
- overflow-y: auto;
122
- font-family: 'Consolas', 'Monaco', monospace;
123
- font-size: 13px;
124
- }
125
-
126
- .logEntry {
127
- margin-bottom: 8px;
128
- line-height: 1.5;
129
- }
130
-
131
- .logTimestamp {
132
- color: ${cssManager.bdTheme('#7a7a7a', '#7a7a7a')};
133
- margin-right: 8px;
134
- }
135
-
136
- .logLevel {
137
- font-weight: bold;
138
- margin-right: 8px;
139
- padding: 2px 6px;
140
- border-radius: 3px;
141
- font-size: 11px;
142
- }
143
-
144
- .logLevel.debug {
145
- color: ${cssManager.bdTheme('#6a9955', '#6a9955')};
146
- background: ${cssManager.bdTheme('rgba(106, 153, 85, 0.1)', 'rgba(106, 153, 85, 0.1)')};
147
- }
148
- .logLevel.info {
149
- color: ${cssManager.bdTheme('#569cd6', '#569cd6')};
150
- background: ${cssManager.bdTheme('rgba(86, 156, 214, 0.1)', 'rgba(86, 156, 214, 0.1)')};
151
- }
152
- .logLevel.warn {
153
- color: ${cssManager.bdTheme('#ce9178', '#ce9178')};
154
- background: ${cssManager.bdTheme('rgba(206, 145, 120, 0.1)', 'rgba(206, 145, 120, 0.1)')};
155
- }
156
- .logLevel.error {
157
- color: ${cssManager.bdTheme('#f44747', '#f44747')};
158
- background: ${cssManager.bdTheme('rgba(244, 71, 71, 0.1)', 'rgba(244, 71, 71, 0.1)')};
159
- }
160
-
161
- .logCategory {
162
- color: ${cssManager.bdTheme('#c586c0', '#c586c0')};
163
- margin-right: 8px;
164
- }
165
-
166
- .logMessage {
167
- color: ${cssManager.bdTheme('#333', '#d4d4d4')};
168
- }
169
-
170
- .noLogs {
171
- color: ${cssManager.bdTheme('#7a7a7a', '#7a7a7a')};
172
- text-align: center;
173
- padding: 40px;
174
- }
175
115
  `,
176
116
  ];
177
117
  render() {
178
118
  return html `
179
119
  <ops-sectionheading>Logs</ops-sectionheading>
180
-
120
+
181
121
  <div class="controls">
182
122
  <div class="filterGroup">
183
- <dees-button
123
+ <dees-button
184
124
  @click=${() => this.fetchLogs()}
185
125
  >
186
126
  Refresh Logs
187
127
  </dees-button>
188
-
189
- <dees-button
190
- @click=${() => this.toggleStreaming()}
191
- .type=${this.logState.isStreaming ? 'highlighted' : 'normal'}
192
- >
193
- ${this.logState.isStreaming ? 'Stop Streaming' : 'Start Streaming'}
194
- </dees-button>
195
128
  </div>
196
129
 
197
130
  <div class="filterGroup">
@@ -222,26 +155,44 @@ let OpsViewLogs = (() => {
222
155
  </div>
223
156
  </div>
224
157
 
225
- <div class="logContainer">
226
- ${this.logState.recentLogs.length > 0 ?
227
- this.logState.recentLogs.map(log => html `
228
- <div class="logEntry">
229
- <span class="logTimestamp">${new Date(log.timestamp).toLocaleTimeString()}</span>
230
- <span class="logLevel ${log.level}">${log.level.toUpperCase()}</span>
231
- <span class="logCategory">[${log.category}]</span>
232
- <span class="logMessage">${log.message}</span>
233
- </div>
234
- `) : html `
235
- <div class="noLogs">No logs to display</div>
236
- `}
237
- </div>
158
+ <dees-chart-log
159
+ .label=${'Application Logs'}
160
+ .autoScroll=${true}
161
+ .maxEntries=${2000}
162
+ .showMetrics=${true}
163
+ ></dees-chart-log>
238
164
  `;
239
165
  }
240
166
  async connectedCallback() {
241
167
  super.connectedCallback();
242
- // Auto-fetch logs when the view mounts
243
168
  this.fetchLogs();
244
169
  }
170
+ async updated(changedProperties) {
171
+ super.updated(changedProperties);
172
+ if (changedProperties.has('logState')) {
173
+ this.pushLogsToChart();
174
+ }
175
+ }
176
+ async pushLogsToChart() {
177
+ const chartLog = this.shadowRoot?.querySelector('dees-chart-log');
178
+ if (!chartLog)
179
+ return;
180
+ // Ensure the chart element has finished its own initialization
181
+ await chartLog.updateComplete;
182
+ chartLog.clearLogs();
183
+ const entries = this.getMappedLogEntries();
184
+ if (entries.length > 0) {
185
+ chartLog.updateLog(entries);
186
+ }
187
+ }
188
+ getMappedLogEntries() {
189
+ return this.logState.recentLogs.map((log) => ({
190
+ timestamp: new Date(log.timestamp).toISOString(),
191
+ level: log.level,
192
+ message: log.message,
193
+ source: log.category,
194
+ }));
195
+ }
245
196
  async fetchLogs() {
246
197
  await appstate.logStatePart.dispatchAction(appstate.fetchRecentLogsAction, {
247
198
  limit: this.filterLimit,
@@ -264,17 +215,6 @@ let OpsViewLogs = (() => {
264
215
  }
265
216
  this.fetchLogs();
266
217
  }
267
- getActiveFilters() {
268
- return {
269
- level: this.filterLevel,
270
- category: this.filterCategory,
271
- limit: this.filterLimit,
272
- };
273
- }
274
- toggleStreaming() {
275
- // TODO: Implement log streaming with VirtualStream
276
- console.log('Streaming toggle not yet implemented');
277
- }
278
218
  static {
279
219
  __runInitializers(_classThis, _classExtraInitializers);
280
220
  }
@@ -282,4 +222,4 @@ let OpsViewLogs = (() => {
282
222
  return OpsViewLogs = _classThis;
283
223
  })();
284
224
  export { OpsViewLogs };
285
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctbG9ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy9vcHMtdmlldy1sb2dzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUNMLFdBQVcsRUFDWCxhQUFhLEVBQ2IsSUFBSSxFQUNKLEtBQUssRUFDTCxHQUFHLEVBQ0gsVUFBVSxHQUNYLE1BQU0sNkJBQTZCLENBQUM7SUFHeEIsV0FBVzs0QkFEdkIsYUFBYSxDQUFDLGVBQWUsQ0FBQzs7OztzQkFDRSxXQUFXOzs7Ozs7Ozs7Ozs7OzJCQUFuQixTQUFRLFdBQVc7Ozs7b0NBQ3pDLEtBQUssRUFBRTt1Q0FPUCxLQUFLLEVBQUU7MENBR1AsS0FBSyxFQUFFO3VDQUdQLEtBQUssRUFBRTtZQVpSLDZLQUFTLFFBQVEsNkJBQVIsUUFBUSwyRkFJZjtZQUdGLHNMQUFTLFdBQVcsNkJBQVgsV0FBVyxpR0FBcUI7WUFHekMsK0xBQVMsY0FBYyw2QkFBZCxjQUFjLHVHQUFxQjtZQUc1QyxzTEFBUyxXQUFXLDZCQUFYLFdBQVcsaUdBQWU7WUFmckMsNktBdU5DOzs7O1FBck5DLDZFQUF3QztZQUN0QyxVQUFVLEVBQUUsRUFBRTtZQUNkLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLE9BQU8sRUFBRSxFQUFFO1NBQ1osRUFBQztRQUpGLElBQVMsUUFBUSw4Q0FJZjtRQUpGLElBQVMsUUFBUSxvREFJZjtRQUdGLG1KQUF5QztRQUF6QyxJQUFTLFdBQVcsaURBQXFCO1FBQXpDLElBQVMsV0FBVyx1REFBcUI7UUFHekMsNEpBQTRDO1FBQTVDLElBQVMsY0FBYyxvREFBcUI7UUFBNUMsSUFB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
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctbG9ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy9vcHMtdmlldy1sb2dzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUNMLFdBQVcsRUFDWCxhQUFhLEVBQ2IsSUFBSSxFQUNKLEtBQUssRUFDTCxHQUFHLEVBQ0gsVUFBVSxHQUNYLE1BQU0sNkJBQTZCLENBQUM7SUFHeEIsV0FBVzs0QkFEdkIsYUFBYSxDQUFDLGVBQWUsQ0FBQzs7OztzQkFDRSxXQUFXOzs7Ozs7Ozs7Ozs7OzJCQUFuQixTQUFRLFdBQVc7Ozs7b0NBQ3pDLEtBQUssRUFBRTt1Q0FPUCxLQUFLLEVBQUU7MENBR1AsS0FBSyxFQUFFO3VDQUdQLEtBQUssRUFBRTtZQVpSLDZLQUFTLFFBQVEsNkJBQVIsUUFBUSwyRkFJZjtZQUdGLHNMQUFTLFdBQVcsNkJBQVgsV0FBVyxpR0FBcUI7WUFHekMsK0xBQVMsY0FBYyw2QkFBZCxjQUFjLHVHQUFxQjtZQUc1QyxzTEFBUyxXQUFXLDZCQUFYLFdBQVcsaUdBQWU7WUFmckMsNktBNEpDOzs7O1FBMUpDLDZFQUF3QztZQUN0QyxVQUFVLEVBQUUsRUFBRTtZQUNkLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLE9BQU8sRUFBRSxFQUFFO1NBQ1osRUFBQztRQUpGLElBQVMsUUFBUSw4Q0FJZjtRQUpGLElBQVMsUUFBUSxvREFJZjtRQUdGLG1KQUF5QztRQUF6QyxJQUFTLFdBQVcsaURBQXFCO1FBQXpDLElBQVMsV0FBVyx1REFBcUI7UUFHekMsNEpBQTRDO1FBQTVDLElBQVMsY0FBYyxvREFBcUI7UUFBNUMsSUFB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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@serve.zone/dcrouter",
3
3
  "private": false,
4
- "version": "7.1.0",
4
+ "version": "7.2.0",
5
5
  "description": "A multifaceted routing service handling mail and SMS delivery functions.",
6
6
  "type": "module",
7
7
  "exports": {
@@ -42,7 +42,7 @@
42
42
  "@push.rocks/smartfile": "^13.1.2",
43
43
  "@push.rocks/smartguard": "^3.1.0",
44
44
  "@push.rocks/smartjwt": "^2.2.1",
45
- "@push.rocks/smartlog": "^3.2.0",
45
+ "@push.rocks/smartlog": "^3.2.1",
46
46
  "@push.rocks/smartmetrics": "^3.0.1",
47
47
  "@push.rocks/smartmongo": "^5.1.0",
48
48
  "@push.rocks/smartmta": "^5.2.2",
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '7.1.0',
6
+ version: '7.2.0',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  }
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '7.1.0',
6
+ version: '7.2.0',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  }
@@ -55,87 +55,20 @@ export class OpsViewLogs extends DeesElement {
55
55
  align-items: center;
56
56
  gap: 8px;
57
57
  }
58
-
59
- .logContainer {
60
- background: ${cssManager.bdTheme('#f8f9fa', '#1e1e1e')};
61
- border-radius: 8px;
62
- padding: 16px;
63
- max-height: 600px;
64
- overflow-y: auto;
65
- font-family: 'Consolas', 'Monaco', monospace;
66
- font-size: 13px;
67
- }
68
-
69
- .logEntry {
70
- margin-bottom: 8px;
71
- line-height: 1.5;
72
- }
73
-
74
- .logTimestamp {
75
- color: ${cssManager.bdTheme('#7a7a7a', '#7a7a7a')};
76
- margin-right: 8px;
77
- }
78
-
79
- .logLevel {
80
- font-weight: bold;
81
- margin-right: 8px;
82
- padding: 2px 6px;
83
- border-radius: 3px;
84
- font-size: 11px;
85
- }
86
-
87
- .logLevel.debug {
88
- color: ${cssManager.bdTheme('#6a9955', '#6a9955')};
89
- background: ${cssManager.bdTheme('rgba(106, 153, 85, 0.1)', 'rgba(106, 153, 85, 0.1)')};
90
- }
91
- .logLevel.info {
92
- color: ${cssManager.bdTheme('#569cd6', '#569cd6')};
93
- background: ${cssManager.bdTheme('rgba(86, 156, 214, 0.1)', 'rgba(86, 156, 214, 0.1)')};
94
- }
95
- .logLevel.warn {
96
- color: ${cssManager.bdTheme('#ce9178', '#ce9178')};
97
- background: ${cssManager.bdTheme('rgba(206, 145, 120, 0.1)', 'rgba(206, 145, 120, 0.1)')};
98
- }
99
- .logLevel.error {
100
- color: ${cssManager.bdTheme('#f44747', '#f44747')};
101
- background: ${cssManager.bdTheme('rgba(244, 71, 71, 0.1)', 'rgba(244, 71, 71, 0.1)')};
102
- }
103
-
104
- .logCategory {
105
- color: ${cssManager.bdTheme('#c586c0', '#c586c0')};
106
- margin-right: 8px;
107
- }
108
-
109
- .logMessage {
110
- color: ${cssManager.bdTheme('#333', '#d4d4d4')};
111
- }
112
-
113
- .noLogs {
114
- color: ${cssManager.bdTheme('#7a7a7a', '#7a7a7a')};
115
- text-align: center;
116
- padding: 40px;
117
- }
118
58
  `,
119
59
  ];
120
60
 
121
61
  public render() {
122
62
  return html`
123
63
  <ops-sectionheading>Logs</ops-sectionheading>
124
-
64
+
125
65
  <div class="controls">
126
66
  <div class="filterGroup">
127
- <dees-button
67
+ <dees-button
128
68
  @click=${() => this.fetchLogs()}
129
69
  >
130
70
  Refresh Logs
131
71
  </dees-button>
132
-
133
- <dees-button
134
- @click=${() => this.toggleStreaming()}
135
- .type=${this.logState.isStreaming ? 'highlighted' : 'normal'}
136
- >
137
- ${this.logState.isStreaming ? 'Stop Streaming' : 'Start Streaming'}
138
- </dees-button>
139
72
  </div>
140
73
 
141
74
  <div class="filterGroup">
@@ -143,7 +76,7 @@ export class OpsViewLogs extends DeesElement {
143
76
  <dees-input-dropdown
144
77
  .options=${['all', 'debug', 'info', 'warn', 'error']}
145
78
  .selectedOption=${'all'}
146
- @selectedOption=${(e) => this.updateFilter('level', e.detail)}
79
+ @selectedOption=${(e: any) => this.updateFilter('level', e.detail)}
147
80
  ></dees-input-dropdown>
148
81
  </div>
149
82
 
@@ -152,7 +85,7 @@ export class OpsViewLogs extends DeesElement {
152
85
  <dees-input-dropdown
153
86
  .options=${['all', 'smtp', 'dns', 'security', 'system', 'email']}
154
87
  .selectedOption=${'all'}
155
- @selectedOption=${(e) => this.updateFilter('category', e.detail)}
88
+ @selectedOption=${(e: any) => this.updateFilter('category', e.detail)}
156
89
  ></dees-input-dropdown>
157
90
  </div>
158
91
 
@@ -161,34 +94,55 @@ export class OpsViewLogs extends DeesElement {
161
94
  <dees-input-dropdown
162
95
  .options=${['50', '100', '200', '500']}
163
96
  .selectedOption=${'100'}
164
- @selectedOption=${(e) => this.updateFilter('limit', e.detail)}
97
+ @selectedOption=${(e: any) => this.updateFilter('limit', e.detail)}
165
98
  ></dees-input-dropdown>
166
99
  </div>
167
100
  </div>
168
101
 
169
- <div class="logContainer">
170
- ${this.logState.recentLogs.length > 0 ?
171
- this.logState.recentLogs.map(log => html`
172
- <div class="logEntry">
173
- <span class="logTimestamp">${new Date(log.timestamp).toLocaleTimeString()}</span>
174
- <span class="logLevel ${log.level}">${log.level.toUpperCase()}</span>
175
- <span class="logCategory">[${log.category}]</span>
176
- <span class="logMessage">${log.message}</span>
177
- </div>
178
- `) : html`
179
- <div class="noLogs">No logs to display</div>
180
- `
181
- }
182
- </div>
102
+ <dees-chart-log
103
+ .label=${'Application Logs'}
104
+ .autoScroll=${true}
105
+ .maxEntries=${2000}
106
+ .showMetrics=${true}
107
+ ></dees-chart-log>
183
108
  `;
184
109
  }
185
110
 
186
111
  async connectedCallback() {
187
112
  super.connectedCallback();
188
- // Auto-fetch logs when the view mounts
189
113
  this.fetchLogs();
190
114
  }
191
115
 
116
+ async updated(changedProperties: Map<string, any>) {
117
+ super.updated(changedProperties);
118
+ if (changedProperties.has('logState')) {
119
+ this.pushLogsToChart();
120
+ }
121
+ }
122
+
123
+ private async pushLogsToChart() {
124
+ const chartLog = this.shadowRoot?.querySelector('dees-chart-log') as any;
125
+ if (!chartLog) return;
126
+
127
+ // Ensure the chart element has finished its own initialization
128
+ await chartLog.updateComplete;
129
+
130
+ chartLog.clearLogs();
131
+ const entries = this.getMappedLogEntries();
132
+ if (entries.length > 0) {
133
+ chartLog.updateLog(entries);
134
+ }
135
+ }
136
+
137
+ private getMappedLogEntries() {
138
+ return this.logState.recentLogs.map((log) => ({
139
+ timestamp: new Date(log.timestamp).toISOString(),
140
+ level: log.level as 'debug' | 'info' | 'warn' | 'error',
141
+ message: log.message,
142
+ source: log.category,
143
+ }));
144
+ }
145
+
192
146
  private async fetchLogs() {
193
147
  await appstate.logStatePart.dispatchAction(appstate.fetchRecentLogsAction, {
194
148
  limit: this.filterLimit,
@@ -214,17 +168,4 @@ export class OpsViewLogs extends DeesElement {
214
168
 
215
169
  this.fetchLogs();
216
170
  }
217
-
218
- private getActiveFilters() {
219
- return {
220
- level: this.filterLevel,
221
- category: this.filterCategory,
222
- limit: this.filterLimit,
223
- };
224
- }
225
-
226
- private toggleStreaming() {
227
- // TODO: Implement log streaming with VirtualStream
228
- console.log('Streaming toggle not yet implemented');
229
- }
230
- }
171
+ }