un-cli 0.0.63 → 0.0.65
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 +3 -1
- package/index.mjs +248 -17
- package/out.txt +0 -0
- package/package.json +1 -1
package/cmd.txt
CHANGED
package/index.mjs
CHANGED
|
@@ -7,7 +7,7 @@ import { AdminLog } from "./adminlog.mjs"
|
|
|
7
7
|
import { logger } from "./logger.mjs"
|
|
8
8
|
import fetch from "node-fetch"
|
|
9
9
|
//update version
|
|
10
|
-
let version = "0.0.
|
|
10
|
+
let version = "0.0.65";
|
|
11
11
|
const GENERATE_TOKEN_TIME_MIN = 30;
|
|
12
12
|
|
|
13
13
|
let rl = null;
|
|
@@ -178,9 +178,13 @@ const inputs = {
|
|
|
178
178
|
"count": "Lists the number of rows in all feature layers.",
|
|
179
179
|
"count --system": "Lists the number of rows in system layers.",
|
|
180
180
|
"connect --service": "Connects to the another service",
|
|
181
|
-
"tracelogs --
|
|
182
|
-
"
|
|
181
|
+
"tracelogs --age <minutes>": "Lists utility network trace summary logs for the last x minutes (requires admin)",
|
|
182
|
+
"validatelogs --age <minutes>": "Lists utility network validate summary logs for the last x minutes (requires admin)",
|
|
183
|
+
"updatesubnetworkslog --age <minutes>": "Lists utility network update subnetworks summary logs for the last x minutes (requires admin)",
|
|
184
|
+
"arlogs --age <minutes>": "Lists attribute rules execution logs for the last x minutes (requires admin)",
|
|
183
185
|
"arlogs --byrule [--minguid --maxguid]": "Lists attribute rules execution summary by rule (requires admin), --maxguid and --minguid show the GUID of the feature",
|
|
186
|
+
"topsql --age <minutes>": "Lists all queries executed in the last x minutes (requires admin)",
|
|
187
|
+
|
|
184
188
|
"whoami": "Lists the current login info",
|
|
185
189
|
"clear": "Clears this screen",
|
|
186
190
|
"quit": "Exit this program"
|
|
@@ -674,17 +678,27 @@ const inputs = {
|
|
|
674
678
|
|
|
675
679
|
},
|
|
676
680
|
|
|
677
|
-
"^arlogs
|
|
681
|
+
"^arlogs --age": async input => {
|
|
678
682
|
const topLogCount = 200;
|
|
679
683
|
const pageSize = 10000
|
|
680
|
-
console.log(`Querying attribute rules logs for ${parameters.service} ...`)
|
|
681
|
-
console.log(`Displaying top ${topLogCount} entries only..`)
|
|
682
684
|
|
|
683
|
-
|
|
685
|
+
|
|
686
|
+
const inputParam = input.match(/--age .*/gm)
|
|
687
|
+
let mins = 30; //query logs for the last 30 minutes
|
|
688
|
+
if (inputParam != null && inputParam.length > 0)
|
|
689
|
+
mins = inputParam[0].replace("--age ", "")
|
|
690
|
+
|
|
691
|
+
|
|
692
|
+
console.log(`Querying attribute rules logs for ${parameters.service} for the last ${mins} minutes ...`)
|
|
693
|
+
|
|
694
|
+
const startTime = Date.now() - mins*60*1000
|
|
695
|
+
const endTime = Date.now();
|
|
696
|
+
|
|
697
|
+
let result= await adminLog.query([102003], [parameters.service+ ".MapServer"], topLogCount, startTime, endTime , "DEBUG")
|
|
684
698
|
let jsonRes = await result.json()
|
|
685
699
|
let allMessages = [].concat(jsonRes.logMessages)
|
|
686
700
|
|
|
687
|
-
while (jsonRes.hasMore
|
|
701
|
+
while (jsonRes.hasMore )
|
|
688
702
|
{
|
|
689
703
|
//start paging
|
|
690
704
|
logger.info(`Aggregating messages... total so far ${allMessages.length} debug entries but more left, pulling logs before ${new Date(jsonRes.endTime)}`)
|
|
@@ -714,17 +728,16 @@ const inputs = {
|
|
|
714
728
|
|
|
715
729
|
},
|
|
716
730
|
|
|
717
|
-
|
|
718
|
-
|
|
731
|
+
|
|
719
732
|
|
|
720
|
-
"^tracelogs --
|
|
733
|
+
"^tracelogs --age": async input => {
|
|
721
734
|
const topLogCount = 1000;
|
|
722
735
|
const pageSize = 10000
|
|
723
736
|
|
|
724
|
-
const inputParam = input.match(/--
|
|
737
|
+
const inputParam = input.match(/--age .*/gm)
|
|
725
738
|
let mins = 30; //query logs for the last 30 minutes
|
|
726
739
|
if (inputParam != null && inputParam.length > 0)
|
|
727
|
-
mins = inputParam[0].replace("--
|
|
740
|
+
mins = inputParam[0].replace("--age ", "")
|
|
728
741
|
|
|
729
742
|
console.log(`Querying trace logs for ${parameters.service} for the last ${mins} minutes ...`)
|
|
730
743
|
const startTime = Date.now() - mins*60*1000
|
|
@@ -732,20 +745,238 @@ const inputs = {
|
|
|
732
745
|
let result= await adminLog.query([102002], [parameters.service+ ".MapServer"], topLogCount, startTime ,endTime , "VERBOSE")
|
|
733
746
|
let jsonRes = await result.json()
|
|
734
747
|
let allMessages = [].concat(jsonRes.logMessages)
|
|
735
|
-
allMessages = allMessages.filter(m => m.message.indexOf("
|
|
748
|
+
allMessages = allMessages.filter(m => m.message.indexOf("------ Trace Parameters ----") > -1)
|
|
736
749
|
while (jsonRes.hasMore)
|
|
737
750
|
{
|
|
738
751
|
//start paging
|
|
739
752
|
logger.info(`Aggregating messages... total so far ${allMessages.length} entries but more left, pulling logs before ${new Date(jsonRes.endTime)}`)
|
|
740
|
-
result= await adminLog.query([102002], [parameters.service + ".MapServer"], pageSize, jsonRes.endTime)
|
|
753
|
+
result= await adminLog.query([102002], [parameters.service + ".MapServer"], pageSize, jsonRes.endTime, null, "VERBOSE")
|
|
741
754
|
jsonRes = await result.json()
|
|
742
755
|
|
|
743
|
-
allMessages = allMessages.concat(jsonRes.logMessages.filter(m => m.message.indexOf("
|
|
756
|
+
allMessages = allMessages.concat(jsonRes.logMessages.filter(m => m.message.indexOf("------ Trace Parameters ----") > -1))
|
|
744
757
|
}
|
|
758
|
+
allMessages.forEach(m => {
|
|
759
|
+
const newMessage = Object.assign({}, m);
|
|
760
|
+
delete newMessage.message
|
|
761
|
+
delete newMessage.source;
|
|
762
|
+
delete newMessage.machine;
|
|
763
|
+
delete newMessage.type;
|
|
764
|
+
delete newMessage.requestID;
|
|
765
|
+
delete newMessage.thread;
|
|
766
|
+
delete newMessage.time;
|
|
767
|
+
|
|
768
|
+
console.table([newMessage])
|
|
769
|
+
console.log(m.message)
|
|
770
|
+
})
|
|
771
|
+
|
|
772
|
+
},
|
|
745
773
|
|
|
746
|
-
|
|
774
|
+
|
|
775
|
+
|
|
776
|
+
"^validatelogs --age": async input => {
|
|
777
|
+
|
|
778
|
+
const topLogCount = 1000;
|
|
779
|
+
const pageSize = 10000
|
|
780
|
+
|
|
781
|
+
const inputParam = input.match(/--age .*/gm)
|
|
782
|
+
let mins = 30; //query logs for the last 30 minutes
|
|
783
|
+
if (inputParam != null && inputParam.length > 0)
|
|
784
|
+
mins = inputParam[0].replace("--age ", "")
|
|
785
|
+
|
|
786
|
+
console.log(`Querying validate logs for ${parameters.service} for the last ${mins} minutes ...`)
|
|
787
|
+
const startTime = Date.now() - mins*60*1000
|
|
788
|
+
const endTime = Date.now();
|
|
789
|
+
let result= await adminLog.query([102003], [parameters.service+ ".MapServer"], topLogCount, startTime ,endTime , "VERBOSE")
|
|
790
|
+
let jsonRes = await result.json()
|
|
791
|
+
let allMessages = [].concat(jsonRes.logMessages)
|
|
792
|
+
allMessages = allMessages.filter(m => m.message.indexOf("-------- Environment ---") > -1 && m.message.indexOf("------ Trace Parameters ----") < 0)
|
|
793
|
+
while (jsonRes.hasMore)
|
|
794
|
+
{
|
|
795
|
+
//start paging
|
|
796
|
+
logger.info(`Aggregating messages... total so far ${allMessages.length} entries but more left, pulling logs before ${new Date(jsonRes.endTime)}`)
|
|
797
|
+
result= await adminLog.query([102003], [parameters.service + ".MapServer"], pageSize, jsonRes.endTime, null, "VERBOSE")
|
|
798
|
+
jsonRes = await result.json()
|
|
799
|
+
|
|
800
|
+
allMessages = allMessages.concat(jsonRes.logMessages.filter(m => m.message.indexOf("-------- Environment ---") > -1 && m.message.indexOf("------ Trace Parameters ----") == -1))
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
|
|
804
|
+
allMessages.forEach(m => {
|
|
805
|
+
const newMessage = Object.assign({}, m);
|
|
806
|
+
delete newMessage.message
|
|
807
|
+
delete newMessage.source;
|
|
808
|
+
delete newMessage.machine;
|
|
809
|
+
delete newMessage.type;
|
|
810
|
+
delete newMessage.requestID;
|
|
811
|
+
delete newMessage.thread;
|
|
812
|
+
delete newMessage.time;
|
|
813
|
+
|
|
814
|
+
console.table([newMessage])
|
|
815
|
+
console.log(m.message)
|
|
816
|
+
})
|
|
817
|
+
|
|
818
|
+
},
|
|
819
|
+
|
|
820
|
+
|
|
821
|
+
|
|
822
|
+
|
|
823
|
+
"^updatesubnetworkslogs --age": async input => {
|
|
824
|
+
const topLogCount = 1000;
|
|
825
|
+
const pageSize = 10000
|
|
826
|
+
|
|
827
|
+
const inputParam = input.match(/--age .*/gm)
|
|
828
|
+
let mins = 30; //query logs for the last 30 minutes
|
|
829
|
+
if (inputParam != null && inputParam.length > 0)
|
|
830
|
+
mins = inputParam[0].replace("--age ", "")
|
|
831
|
+
|
|
832
|
+
console.log(`Querying subnetwork logs for ${parameters.service} for the last ${mins} minutes ...`)
|
|
833
|
+
const startTime = Date.now() - mins*60*1000
|
|
834
|
+
const endTime = Date.now();
|
|
835
|
+
let result= await adminLog.query([102003], [parameters.service+ ".MapServer"], topLogCount, startTime ,endTime , "VERBOSE")
|
|
836
|
+
let jsonRes = await result.json()
|
|
837
|
+
let allMessages = [].concat(jsonRes.logMessages)
|
|
838
|
+
allMessages = allMessages.filter(m => m.message.indexOf("---- Subnetwork Parameters ----") > -1)
|
|
839
|
+
while (jsonRes.hasMore)
|
|
840
|
+
{
|
|
841
|
+
//start paging
|
|
842
|
+
logger.info(`Aggregating messages... total so far ${allMessages.length} entries but more left, pulling logs before ${new Date(jsonRes.endTime)}`)
|
|
843
|
+
result= await adminLog.query([102003], [parameters.service + ".MapServer"], pageSize, jsonRes.endTime, null, "VERBOSE")
|
|
844
|
+
jsonRes = await result.json()
|
|
845
|
+
|
|
846
|
+
allMessages = allMessages.concat(jsonRes.logMessages.filter(m => m.message.indexOf("---- Subnetwork Parameters ----") > -1))
|
|
847
|
+
}
|
|
848
|
+
allMessages.forEach(m => {
|
|
849
|
+
const newMessage = Object.assign({}, m);
|
|
850
|
+
delete newMessage.message
|
|
851
|
+
delete newMessage.source;
|
|
852
|
+
delete newMessage.machine;
|
|
853
|
+
delete newMessage.type;
|
|
854
|
+
delete newMessage.requestID;
|
|
855
|
+
delete newMessage.thread;
|
|
856
|
+
delete newMessage.time;
|
|
857
|
+
|
|
858
|
+
console.table([newMessage])
|
|
859
|
+
console.log(m.message)
|
|
860
|
+
})
|
|
747
861
|
|
|
748
862
|
},
|
|
863
|
+
|
|
864
|
+
|
|
865
|
+
|
|
866
|
+
"^topsql --age": async input => {
|
|
867
|
+
const topLogCount = 1000;
|
|
868
|
+
const pageSize = 10000
|
|
869
|
+
|
|
870
|
+
const inputParam = input.match(/--age .*/gm)
|
|
871
|
+
let mins = 30; //query logs for the last 30 minutes
|
|
872
|
+
if (inputParam != null && inputParam.length > 0)
|
|
873
|
+
mins = inputParam[0].replace("--age ", "")
|
|
874
|
+
|
|
875
|
+
console.log(`Querying cursor sql logs for ${parameters.service} for the last ${mins} minutes ...`)
|
|
876
|
+
const startTime = Date.now() - mins*60*1000
|
|
877
|
+
const endTime = Date.now();
|
|
878
|
+
let result= await adminLog.query([102023], [parameters.service+ ".MapServer"], topLogCount, startTime ,endTime , "DEBUG")
|
|
879
|
+
let jsonRes = await result.json()
|
|
880
|
+
let allMessages = [].concat(jsonRes.logMessages)
|
|
881
|
+
allMessages = allMessages.filter(m => m.message.indexOf("EndCursor;") > -1)
|
|
882
|
+
while (jsonRes.hasMore)
|
|
883
|
+
{
|
|
884
|
+
//start paging
|
|
885
|
+
logger.info(`Aggregating messages... total so far ${allMessages.length} entries but more left, pulling logs before ${new Date(jsonRes.endTime)}`)
|
|
886
|
+
result= await adminLog.query([102023], [parameters.service + ".MapServer"], pageSize, jsonRes.endTime, null, "DEBUG")
|
|
887
|
+
jsonRes = await result.json()
|
|
888
|
+
|
|
889
|
+
allMessages = allMessages.concat(jsonRes.logMessages.filter(m => m.message.indexOf("EndCursor;") > -1))
|
|
890
|
+
}
|
|
891
|
+
console.log ("Filtering messages...")
|
|
892
|
+
allMessages = allMessages
|
|
893
|
+
.map( m=> {
|
|
894
|
+
m.dataAccessElapsed = parseFloat(m.message.split(";")[1].split(" ")[1])
|
|
895
|
+
m.ExecuteQueryElapsed = parseFloat(m.message.split(";")[2].split(" ")[1])
|
|
896
|
+
m.totalTimeElapsed = m.dataAccessElapsed + m.ExecuteQueryElapsed
|
|
897
|
+
m.elapsed = parseFloat(m.elapsed); return m;
|
|
898
|
+
|
|
899
|
+
})
|
|
900
|
+
.sort( (m1,m2) => m2.totalTimeElapsed - m1.totalTimeElapsed)
|
|
901
|
+
.slice(0, 10) ;//first 10
|
|
902
|
+
|
|
903
|
+
|
|
904
|
+
console.log("-----Top 10 SQL----")
|
|
905
|
+
let i =0;
|
|
906
|
+
allMessages= allMessages.forEach(m =>
|
|
907
|
+
{
|
|
908
|
+
|
|
909
|
+
const x = m.message.split(";")
|
|
910
|
+
console.log(`id: ${i++}`)
|
|
911
|
+
console.log(`\tAt: ${new Date(m.time)} (${m.time})`)
|
|
912
|
+
console.log(`\tUser: ${m.user}`)
|
|
913
|
+
console.log(`\tElapsed: ${m.elapsed*1000} ms`)
|
|
914
|
+
console.log(`\ttotalTimeElapsed: ${m.totalTimeElapsed} ms`)
|
|
915
|
+
console.log(`\tQuery:`)
|
|
916
|
+
x.forEach(a => console.log(`\t${a}`))
|
|
917
|
+
console.log(`\n`)
|
|
918
|
+
|
|
919
|
+
})
|
|
920
|
+
|
|
921
|
+
},
|
|
922
|
+
|
|
923
|
+
|
|
924
|
+
|
|
925
|
+
"^cursorlogs --age": async input => {
|
|
926
|
+
const topLogCount = 1000;
|
|
927
|
+
const pageSize = 10000
|
|
928
|
+
|
|
929
|
+
const inputParam = input.match(/--age .*/gm)
|
|
930
|
+
let mins = 30; //query logs for the last 30 minutes
|
|
931
|
+
if (inputParam != null && inputParam.length > 0)
|
|
932
|
+
mins = inputParam[0].replace("--age ", "")
|
|
933
|
+
|
|
934
|
+
console.log(`Querying cursor sql logs for ${parameters.service} for the last ${mins} minutes ...`)
|
|
935
|
+
const startTime = Date.now() - mins*60*1000
|
|
936
|
+
const endTime = Date.now();
|
|
937
|
+
let result= await adminLog.query([102023], [parameters.service+ ".MapServer"], topLogCount, startTime ,endTime , "DEBUG")
|
|
938
|
+
let jsonRes = await result.json()
|
|
939
|
+
let allMessages = [].concat(jsonRes.logMessages)
|
|
940
|
+
allMessages = allMessages.filter(m => m.message.indexOf("EndCursor;") > -1)
|
|
941
|
+
while (jsonRes.hasMore)
|
|
942
|
+
{
|
|
943
|
+
//start paging
|
|
944
|
+
logger.info(`Aggregating messages... total so far ${allMessages.length} entries but more left, pulling logs before ${new Date(jsonRes.endTime)}`)
|
|
945
|
+
result= await adminLog.query([102023], [parameters.service + ".MapServer"], pageSize, jsonRes.endTime, null, "DEBUG")
|
|
946
|
+
jsonRes = await result.json()
|
|
947
|
+
|
|
948
|
+
allMessages = allMessages.concat(jsonRes.logMessages.filter(m => m.message.indexOf("EndCursor;") > -1))
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
|
|
952
|
+
//
|
|
953
|
+
allMessages= allMessages.map(m => {
|
|
954
|
+
|
|
955
|
+
const r= m.message.split (";")
|
|
956
|
+
delete r[0];
|
|
957
|
+
delete r[1];
|
|
958
|
+
delete r[3];
|
|
959
|
+
return r;
|
|
960
|
+
|
|
961
|
+
const newMessage = Object.assign({}, m);
|
|
962
|
+
|
|
963
|
+
delete newMessage.source;
|
|
964
|
+
delete newMessage.machine;
|
|
965
|
+
delete newMessage.type;
|
|
966
|
+
delete newMessage.requestID;
|
|
967
|
+
delete newMessage.methodName;
|
|
968
|
+
delete newMessage.process;
|
|
969
|
+
delete newMessage.thread;
|
|
970
|
+
delete newMessage.time;
|
|
971
|
+
delete newMessage.code;
|
|
972
|
+
|
|
973
|
+
return newMessage
|
|
974
|
+
|
|
975
|
+
})
|
|
976
|
+
console.table(allMessages)
|
|
977
|
+
},
|
|
978
|
+
|
|
979
|
+
|
|
749
980
|
"^arlogs --byrule": async input => {
|
|
750
981
|
//--minguid to show min guid
|
|
751
982
|
//--maxguid to show max guid
|
package/out.txt
ADDED
|
File without changes
|