@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.
- package/dist_serve/bundle.js +10 -83
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/ops-view-logs.d.ts +3 -2
- package/dist_ts_web/elements/ops-view-logs.js +35 -95
- package/package.json +2 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/ops-view-logs.ts +42 -101
package/dist_serve/bundle.js
CHANGED
|
@@ -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
|
-
<
|
|
29893
|
-
|
|
29894
|
-
|
|
29895
|
-
|
|
29896
|
-
|
|
29897
|
-
|
|
29898
|
-
|
|
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-
|
|
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.
|
|
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.
|
|
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
|
-
<
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
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,
|
|
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.
|
|
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.
|
|
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",
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -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
|
-
<
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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
|
+
}
|