un-cli 0.0.75 → 0.0.76
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/cmd.txt +1 -1
- package/index.html +216 -22
- package/index.mjs +70 -20
- package/makerequest.mjs +1 -1
- package/package.json +1 -1
package/cmd.txt
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
topology --validate --fishnet
|
|
2
2
|
exit
|
package/index.html
CHANGED
|
@@ -44,6 +44,8 @@
|
|
|
44
44
|
<td><button id = 'btnSQLLogs'>SQL Logs</button></td>
|
|
45
45
|
<td>Message<input id = 'txtFilter' type = 'text'></td>
|
|
46
46
|
<td>User<input id = 'txtUser' type = 'text'></td>
|
|
47
|
+
<td>Start Time<input id = 'txtStartTime' type = 'text'></td>
|
|
48
|
+
<td>End Time<input id = 'txtEndTime' type = 'text'></td>
|
|
47
49
|
</tr>
|
|
48
50
|
|
|
49
51
|
</table>
|
|
@@ -129,7 +131,7 @@
|
|
|
129
131
|
|
|
130
132
|
|
|
131
133
|
async function loadTraceLogs () {
|
|
132
|
-
|
|
134
|
+
|
|
133
135
|
//build table
|
|
134
136
|
const tblResult = document.getElementById("tblResult");
|
|
135
137
|
//clear
|
|
@@ -143,9 +145,110 @@
|
|
|
143
145
|
console.log(`Querying trace logs for ${parameters.service} for the last ${mins} minutes ...`)
|
|
144
146
|
|
|
145
147
|
//page query the admin log
|
|
146
|
-
|
|
148
|
+
let allTheMessages = await adminLogQueryWithPaging(mins, parameters.service, [102002], "------ Trace Parameters ----", "VERBOSE")
|
|
149
|
+
|
|
150
|
+
let allMessages = filterMessages (allTheMessages).map(m => {
|
|
151
|
+
const newMessage = Object.assign({}, m);
|
|
152
|
+
delete newMessage.machine;
|
|
153
|
+
delete newMessage.type;
|
|
154
|
+
delete newMessage.code;
|
|
155
|
+
delete newMessage.requestID;
|
|
156
|
+
delete newMessage.process;
|
|
157
|
+
delete newMessage.thread;
|
|
158
|
+
newMessage.elapsedms = parseInt (parseFloat(newMessage.elapsed) * 1000)
|
|
159
|
+
newMessage.time = new Date(newMessage.time).toLocaleString()
|
|
160
|
+
delete newMessage.elapsed
|
|
161
|
+
|
|
162
|
+
try{
|
|
163
|
+
|
|
164
|
+
//Total Trace Time (4.745 seconds)
|
|
165
|
+
|
|
166
|
+
let re = /Total Trace Time \([-+]?([0-9]*\.[0-9]+|[0-9]+) seconds\)/;
|
|
167
|
+
let res = re.exec(m.message)
|
|
168
|
+
if (res && res.length > 1)
|
|
169
|
+
newMessage.traceTime = parseFloat(res[1])*1000
|
|
170
|
+
|
|
171
|
+
let re1 = /Trace Type: .\w.*/;
|
|
172
|
+
let res1 = re1.exec(m.message)
|
|
173
|
+
if (res1 && res1.length > 0)
|
|
174
|
+
newMessage.traceType = res1[0].replace("Trace Type: ","")
|
|
147
175
|
|
|
148
|
-
|
|
176
|
+
}
|
|
177
|
+
catch(ex){
|
|
178
|
+
console.error(ex)
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
return newMessage;
|
|
183
|
+
})
|
|
184
|
+
.sort( (m1,m2) => m2.elapsedms - m1.elapsedms)
|
|
185
|
+
|
|
186
|
+
//clear
|
|
187
|
+
while(tblResult.firstChild) tblResult.removeChild(tblResult.firstChild)
|
|
188
|
+
|
|
189
|
+
const header = document.createElement("tr");
|
|
190
|
+
const cService = document.createElement("th");
|
|
191
|
+
cService.textContent = "Source"
|
|
192
|
+
const cTime = document.createElement("th");
|
|
193
|
+
cTime.textContent = "Time"
|
|
194
|
+
const cUser = document.createElement("th");
|
|
195
|
+
cUser.textContent = "User"
|
|
196
|
+
const cMethod = document.createElement("th");
|
|
197
|
+
cMethod.textContent = "Method"
|
|
198
|
+
const cElapsedMS = document.createElement("th");
|
|
199
|
+
cElapsedMS.textContent = "Elapsed (ms)"
|
|
200
|
+
const cTraceType = document.createElement("th");
|
|
201
|
+
cTraceType.textContent = "Trace Type"
|
|
202
|
+
const cTraceTime = document.createElement("th");
|
|
203
|
+
cTraceTime.textContent = "Trace Time"
|
|
204
|
+
const cLog = document.createElement("th");
|
|
205
|
+
cLog.textContent = "Full Log"
|
|
206
|
+
header.appendChild (cService)
|
|
207
|
+
header.appendChild (cTime)
|
|
208
|
+
header.appendChild (cUser)
|
|
209
|
+
header.appendChild (cMethod)
|
|
210
|
+
header.appendChild (cTraceType)
|
|
211
|
+
header.appendChild (cTraceTime)
|
|
212
|
+
header.appendChild (cElapsedMS)
|
|
213
|
+
|
|
214
|
+
header.appendChild (cLog)
|
|
215
|
+
tblResult.appendChild(header)
|
|
216
|
+
allMessages.forEach(m => {
|
|
217
|
+
const logRow = document.createElement("tr");
|
|
218
|
+
const cService = document.createElement("td");
|
|
219
|
+
cService.textContent = m.source.replace(".MapServer", "")
|
|
220
|
+
const cTime = document.createElement("td");
|
|
221
|
+
cTime.textContent = m.time
|
|
222
|
+
const cUser = document.createElement("td");
|
|
223
|
+
cUser.textContent = m.user
|
|
224
|
+
const cMethod = document.createElement("td");
|
|
225
|
+
cMethod.textContent = m.methodName
|
|
226
|
+
const cElapsedMS = document.createElement("td");
|
|
227
|
+
cElapsedMS.textContent = m.elapsedms
|
|
228
|
+
const cTraceType = document.createElement("td");
|
|
229
|
+
cTraceType.textContent = m.traceType
|
|
230
|
+
const cTraceTime = document.createElement("td");
|
|
231
|
+
cTraceTime.textContent = m.traceTime
|
|
232
|
+
|
|
233
|
+
const cLog = document.createElement("td");
|
|
234
|
+
cLog.textContent = "..."
|
|
235
|
+
cLog.fullLog = m.message;
|
|
236
|
+
cLog.addEventListener("click", e=> {navigator.clipboard.writeText(e.target.fullLog); alert("Copied to clipboard")})
|
|
237
|
+
logRow.appendChild (cService)
|
|
238
|
+
logRow.appendChild (cTime)
|
|
239
|
+
logRow.appendChild (cUser)
|
|
240
|
+
logRow.appendChild (cMethod)
|
|
241
|
+
logRow.appendChild (cTraceType)
|
|
242
|
+
logRow.appendChild (cTraceTime)
|
|
243
|
+
logRow.appendChild (cElapsedMS)
|
|
244
|
+
|
|
245
|
+
logRow.appendChild (cLog)
|
|
246
|
+
tblResult.appendChild(logRow)
|
|
247
|
+
})
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
//await populateMessages(allMessages)
|
|
149
252
|
|
|
150
253
|
|
|
151
254
|
}
|
|
@@ -208,31 +311,114 @@ async function loadUpdateSubnetworkLogs () {
|
|
|
208
311
|
|
|
209
312
|
|
|
210
313
|
console.log(`Querying subnetwork logs for ${parameters.service} for the last ${mins} minutes ...`)
|
|
211
|
-
let
|
|
314
|
+
let allTheMessages = await adminLogQueryWithPaging(mins, parameters.service, [102003], "---- Subnetwork Parameters ----", "VERBOSE")
|
|
212
315
|
|
|
316
|
+
|
|
213
317
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
318
|
+
let allMessages = filterMessages (allTheMessages).map(m => {
|
|
319
|
+
|
|
320
|
+
const newMessage = Object.assign({}, m);
|
|
321
|
+
try{
|
|
322
|
+
|
|
323
|
+
delete newMessage.machine;
|
|
324
|
+
delete newMessage.type;
|
|
325
|
+
delete newMessage.code;
|
|
326
|
+
delete newMessage.requestID;
|
|
327
|
+
delete newMessage.process;
|
|
328
|
+
delete newMessage.thread;
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
let re = /Total \([-+]?([0-9]*\.[0-9]+|[0-9]+) seconds\)/;
|
|
332
|
+
let res = re.exec(m.message)
|
|
333
|
+
if (res && res.length > 0)
|
|
334
|
+
newMessage.elapsed = res[1]
|
|
335
|
+
|
|
336
|
+
re = /Total update subnetwork time \([-+]?([0-9]*\.[0-9]+|[0-9]+) seconds\)/;
|
|
337
|
+
res = re.exec(m.message)
|
|
338
|
+
if (res && res.length > 0)
|
|
339
|
+
newMessage.elapsed = res[1]
|
|
217
340
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
341
|
+
|
|
342
|
+
let re1 = /Subnetwork name: .*/;
|
|
343
|
+
let res1 = re1.exec(m.message)
|
|
344
|
+
if (res1 && res1.length > 0)
|
|
345
|
+
newMessage.subnetworkName = res1[0].replace("Subnetwork name: ","")
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
newMessage.elapsedms = parseInt (parseFloat(newMessage.elapsed) * 1000)
|
|
349
|
+
newMessage.time = new Date(newMessage.time).toLocaleString()
|
|
350
|
+
delete newMessage.elapsed
|
|
351
|
+
|
|
352
|
+
|
|
229
353
|
}
|
|
230
354
|
catch(ex){
|
|
231
|
-
|
|
355
|
+
console.error(ex)
|
|
356
|
+
}
|
|
357
|
+
finally {
|
|
358
|
+
return newMessage;
|
|
232
359
|
}
|
|
360
|
+
|
|
361
|
+
})
|
|
362
|
+
.sort( (m1,m2) => m2.elapsedms - m1.elapsedms)
|
|
363
|
+
|
|
364
|
+
//clear
|
|
365
|
+
while(tblResult.firstChild) tblResult.removeChild(tblResult.firstChild)
|
|
366
|
+
|
|
367
|
+
const header = document.createElement("tr");
|
|
368
|
+
const cService = document.createElement("th");
|
|
369
|
+
cService.textContent = "Source"
|
|
370
|
+
const cTime = document.createElement("th");
|
|
371
|
+
cTime.textContent = "Time"
|
|
372
|
+
const cUser = document.createElement("th");
|
|
373
|
+
cUser.textContent = "User"
|
|
374
|
+
const cMethod = document.createElement("th");
|
|
375
|
+
cMethod.textContent = "Method"
|
|
376
|
+
const cElapsedMS = document.createElement("th");
|
|
377
|
+
cElapsedMS.textContent = "Elapsed (ms)"
|
|
378
|
+
const cSubnetworkName = document.createElement("th");
|
|
379
|
+
cSubnetworkName.textContent = "Subnetwork Name"
|
|
380
|
+
const cLog = document.createElement("th");
|
|
381
|
+
cLog.textContent = "Full Log"
|
|
382
|
+
header.appendChild (cService)
|
|
383
|
+
header.appendChild (cTime)
|
|
384
|
+
header.appendChild (cUser)
|
|
385
|
+
header.appendChild (cMethod)
|
|
386
|
+
header.appendChild (cSubnetworkName)
|
|
387
|
+
header.appendChild (cElapsedMS)
|
|
388
|
+
|
|
389
|
+
header.appendChild (cLog)
|
|
390
|
+
tblResult.appendChild(header)
|
|
391
|
+
allMessages.forEach(m => {
|
|
392
|
+
const logRow = document.createElement("tr");
|
|
393
|
+
const cService = document.createElement("td");
|
|
394
|
+
cService.textContent = m.source.replace(".MapServer", "")
|
|
395
|
+
const cTime = document.createElement("td");
|
|
396
|
+
cTime.textContent = m.time
|
|
397
|
+
const cUser = document.createElement("td");
|
|
398
|
+
cUser.textContent = m.user
|
|
399
|
+
const cMethod = document.createElement("td");
|
|
400
|
+
cMethod.textContent = m.methodName
|
|
401
|
+
const cElapsedMS = document.createElement("td");
|
|
402
|
+
cElapsedMS.textContent = m.elapsedms
|
|
403
|
+
const cSubnetworkName = document.createElement("td");
|
|
404
|
+
cSubnetworkName.textContent = m.subnetworkName
|
|
405
|
+
|
|
406
|
+
const cLog = document.createElement("td");
|
|
407
|
+
cLog.textContent = "..."
|
|
408
|
+
cLog.fullLog = m.message;
|
|
409
|
+
cLog.addEventListener("click", e=> {navigator.clipboard.writeText(e.target.fullLog); alert("Copied to clipboard")})
|
|
410
|
+
logRow.appendChild (cService)
|
|
411
|
+
logRow.appendChild (cTime)
|
|
412
|
+
logRow.appendChild (cUser)
|
|
413
|
+
logRow.appendChild (cMethod)
|
|
414
|
+
logRow.appendChild (cSubnetworkName)
|
|
415
|
+
logRow.appendChild (cElapsedMS)
|
|
416
|
+
|
|
417
|
+
logRow.appendChild (cLog)
|
|
418
|
+
tblResult.appendChild(logRow)
|
|
233
419
|
})
|
|
234
|
-
await populateMessages(allMessages)
|
|
235
420
|
|
|
421
|
+
|
|
236
422
|
|
|
237
423
|
}
|
|
238
424
|
|
|
@@ -666,8 +852,16 @@ function numberWithCommas(x) {
|
|
|
666
852
|
let adminLog = new AdminLog(token, portal.serverUrl)
|
|
667
853
|
tblResult.appendChild(prg);
|
|
668
854
|
tblResult.appendChild(btn)
|
|
669
|
-
|
|
670
|
-
const
|
|
855
|
+
let startTime = Date.now()
|
|
856
|
+
const txtStartTime = document.getElementById("txtStartTime")
|
|
857
|
+
if (txtStartTime.value != "")
|
|
858
|
+
startTime = new Date(txtStartTime.value).getTime()
|
|
859
|
+
|
|
860
|
+
let endTime = startTime - mins*60*1000
|
|
861
|
+
const txtEndTime = document.getElementById("txtEndTime")
|
|
862
|
+
if (txtEndTime.value != "")
|
|
863
|
+
endTime = new Date(txtEndTime.value).getTime()
|
|
864
|
+
|
|
671
865
|
let services = [theService + ".MapServer"]
|
|
672
866
|
if (theService == "(All Services)")
|
|
673
867
|
services = "*"
|
package/index.mjs
CHANGED
|
@@ -86,7 +86,7 @@ async function regenerateToken(parameters) {
|
|
|
86
86
|
async function connect(parameters) {
|
|
87
87
|
try{
|
|
88
88
|
//print the parameters
|
|
89
|
-
logger.info(parameters);
|
|
89
|
+
logger.info(JSON.stringify(parameters));
|
|
90
90
|
//connect to portal
|
|
91
91
|
|
|
92
92
|
const token = await getToken(parameters);
|
|
@@ -316,10 +316,12 @@ const inputs = {
|
|
|
316
316
|
//progress
|
|
317
317
|
//timeouts
|
|
318
318
|
//in case failure you don't lose everything
|
|
319
|
-
"^topology --validate
|
|
319
|
+
"^topology --validate --fishnet$": async () => {
|
|
320
320
|
logger.info("Validating Network topology ...");
|
|
321
321
|
|
|
322
|
-
const fullExtent = un.
|
|
322
|
+
const fullExtent = un.layerDefinition.extent;
|
|
323
|
+
//console.log(`add_env(${ JSON.stringify(fullExtent)})`)
|
|
324
|
+
|
|
323
325
|
/*
|
|
324
326
|
fullExtent.xmin = 0;
|
|
325
327
|
fullExtent.xmax = 100;
|
|
@@ -328,13 +330,14 @@ const inputs = {
|
|
|
328
330
|
https://desktop.arcgis.com/en/arcmap/10.3/tools/cartography-toolbox/create-cartographic-partitions.htm
|
|
329
331
|
*/
|
|
330
332
|
//fish net
|
|
331
|
-
const grids =
|
|
333
|
+
const grids = 5; //divide the grid 5 x 5
|
|
332
334
|
const dx = (fullExtent.xmax - fullExtent.xmin) / grids;
|
|
333
335
|
const dy = (fullExtent.ymax - fullExtent.ymin) / grids;
|
|
334
|
-
|
|
335
|
-
const
|
|
336
|
+
|
|
337
|
+
const fishnet = [];
|
|
336
338
|
for (let i =0; i < grids; i ++) {
|
|
337
|
-
|
|
339
|
+
const row = [];
|
|
340
|
+
|
|
338
341
|
for (let j = 0; j < grids; j++) {
|
|
339
342
|
const extent = {
|
|
340
343
|
"xmin": fullExtent.xmin + j*dx,
|
|
@@ -343,24 +346,47 @@ const inputs = {
|
|
|
343
346
|
"ymax": fullExtent.ymin + i*dy + dy,
|
|
344
347
|
"spatialReference": fullExtent.spatialReference
|
|
345
348
|
}
|
|
346
|
-
|
|
349
|
+
row.push({"content": " ", "extent": extent});
|
|
350
|
+
|
|
347
351
|
}
|
|
352
|
+
fishnet.push(row);
|
|
348
353
|
}
|
|
349
354
|
|
|
350
|
-
extents.forEach(async e => {
|
|
351
|
-
const fromDate = new Date();
|
|
352
355
|
|
|
353
|
-
const result = await un.validateNetworkTopology("sde.DEFAULT", e)
|
|
354
|
-
const toDate = new Date();
|
|
355
|
-
const timeEnable = toDate.getTime() - fromDate.getTime();
|
|
356
|
-
const duration = numberWithCommas(Math.round(timeEnable)) + " ms"
|
|
357
|
-
console.clear()
|
|
358
|
-
logger.info("Validating extent " + e.xmin)
|
|
359
|
-
console.table({duration})
|
|
360
356
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
357
|
+
for (let i = 0; i < fishnet.length; i ++) {
|
|
358
|
+
|
|
359
|
+
for (let j = 0 ; j < fishnet[i].length; j++) {
|
|
360
|
+
|
|
361
|
+
fishnet[i][j].content = '⚙️'
|
|
362
|
+
const e = fishnet[i][j].extent
|
|
363
|
+
|
|
364
|
+
try {
|
|
365
|
+
|
|
366
|
+
|
|
367
|
+
const fromDate = new Date();
|
|
368
|
+
console.log("Validating Extent " + JSON.stringify(e));
|
|
369
|
+
printFishnet(fishnet)
|
|
370
|
+
|
|
371
|
+
const result = await un.validateNetworkTopology( e)
|
|
372
|
+
const toDate = new Date();
|
|
373
|
+
const timeEnable = toDate.getTime() - fromDate.getTime();
|
|
374
|
+
const duration = numberWithCommas(Math.round(timeEnable)) + " ms"
|
|
375
|
+
result.duration = duration
|
|
376
|
+
console.table(result)
|
|
377
|
+
//console.log(`add_env(${ JSON.stringify(e)})`)
|
|
378
|
+
fishnet[i][j].content = '✔️'
|
|
379
|
+
|
|
380
|
+
}
|
|
381
|
+
catch(ex){
|
|
382
|
+
console.log(JSON.stringify(ex))
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
}
|
|
388
|
+
console.log("Done")
|
|
389
|
+
|
|
364
390
|
},
|
|
365
391
|
|
|
366
392
|
"^topology --validate$": async () => {
|
|
@@ -1407,3 +1433,27 @@ export async function run (){
|
|
|
1407
1433
|
|
|
1408
1434
|
|
|
1409
1435
|
|
|
1436
|
+
function printFishnet(fishnet) {
|
|
1437
|
+
|
|
1438
|
+
//y is flipped x is ok
|
|
1439
|
+
//i = 0 that is i = fishnet.length -1
|
|
1440
|
+
for (let i =0; i < fishnet.length ; i++){
|
|
1441
|
+
|
|
1442
|
+
for (let j = 0; j < fishnet[i].length;j++)
|
|
1443
|
+
process.stdout.write("+------");
|
|
1444
|
+
|
|
1445
|
+
process.stdout.write("+\n")
|
|
1446
|
+
|
|
1447
|
+
for (let j = 0; j < fishnet[i].length;j++)
|
|
1448
|
+
process.stdout.write(`| ${fishnet[fishnet.length - 1 - i][j].content} `);
|
|
1449
|
+
|
|
1450
|
+
process.stdout.write("|\n")
|
|
1451
|
+
}
|
|
1452
|
+
|
|
1453
|
+
|
|
1454
|
+
for (let j = 0; j < fishnet.length;j++)
|
|
1455
|
+
process.stdout.write("+------");
|
|
1456
|
+
|
|
1457
|
+
process.stdout.write("+\n\n")
|
|
1458
|
+
|
|
1459
|
+
}
|
package/makerequest.mjs
CHANGED