catocli 3.0.14__py3-none-any.whl → 3.0.22__py3-none-any.whl
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.
Potentially problematic release.
This version of catocli might be problematic. Click here for more details.
- catocli/Utils/clidriver.py +16 -8
- catocli/Utils/formatter_account_metrics.py +544 -0
- catocli/Utils/formatter_app_stats.py +184 -0
- catocli/Utils/formatter_app_stats_timeseries.py +377 -0
- catocli/Utils/formatter_events_timeseries.py +459 -0
- catocli/Utils/formatter_socket_port_metrics.py +189 -0
- catocli/Utils/formatter_socket_port_metrics_timeseries.py +339 -0
- catocli/Utils/formatter_utils.py +251 -0
- catocli/Utils/help_formatter.py +1 -1
- catocli/__init__.py +1 -1
- catocli/clisettings.json +37 -5
- catocli/parsers/custom/query_eventsFeed/README.md +94 -0
- catocli/parsers/custom/scim/README.md +346 -0
- catocli/parsers/custom/scim/scim_client.py +132 -26
- catocli/parsers/custom/scim/scim_commands.py +14 -56
- catocli/parsers/customParserApiClient.py +213 -65
- catocli/parsers/mutation_policy/__init__.py +405 -405
- catocli/parsers/mutation_site/__init__.py +15 -15
- catocli/parsers/mutation_sites/__init__.py +15 -15
- catocli/parsers/query_accountMetrics/README.md +99 -9
- catocli/parsers/query_accountMetrics/__init__.py +6 -0
- catocli/parsers/query_appStats/README.md +11 -11
- catocli/parsers/query_appStats/__init__.py +4 -2
- catocli/parsers/query_appStatsTimeSeries/README.md +10 -10
- catocli/parsers/query_appStatsTimeSeries/__init__.py +4 -2
- catocli/parsers/query_auditFeed/README.md +9 -9
- catocli/parsers/query_events/README.md +9 -9
- catocli/parsers/query_eventsTimeSeries/README.md +289 -9
- catocli/parsers/query_eventsTimeSeries/__init__.py +6 -0
- catocli/parsers/query_policy/__init__.py +42 -42
- catocli/parsers/query_socketPortMetrics/README.md +53 -9
- catocli/parsers/query_socketPortMetrics/__init__.py +6 -0
- catocli/parsers/query_socketPortMetricsTimeSeries/README.md +92 -9
- catocli/parsers/query_socketPortMetricsTimeSeries/__init__.py +4 -2
- {catocli-3.0.14.dist-info → catocli-3.0.22.dist-info}/METADATA +1 -1
- {catocli-3.0.14.dist-info → catocli-3.0.22.dist-info}/RECORD +187 -183
- {catocli-3.0.14.dist-info → catocli-3.0.22.dist-info}/top_level.txt +0 -1
- models/mutation.policy.antiMalwareFileHash.addRule.json +20 -0
- models/mutation.policy.antiMalwareFileHash.addSection.json +103 -0
- models/mutation.policy.antiMalwareFileHash.createPolicyRevision.json +123 -0
- models/mutation.policy.antiMalwareFileHash.discardPolicyRevision.json +123 -0
- models/mutation.policy.antiMalwareFileHash.moveRule.json +20 -0
- models/mutation.policy.antiMalwareFileHash.moveSection.json +103 -0
- models/mutation.policy.antiMalwareFileHash.publishPolicyRevision.json +123 -0
- models/mutation.policy.antiMalwareFileHash.removeRule.json +20 -0
- models/mutation.policy.antiMalwareFileHash.removeSection.json +103 -0
- models/mutation.policy.antiMalwareFileHash.updatePolicy.json +123 -0
- models/mutation.policy.antiMalwareFileHash.updateRule.json +20 -0
- models/mutation.policy.antiMalwareFileHash.updateSection.json +103 -0
- models/mutation.policy.appTenantRestriction.addRule.json +20 -0
- models/mutation.policy.appTenantRestriction.addSection.json +103 -0
- models/mutation.policy.appTenantRestriction.createPolicyRevision.json +123 -0
- models/mutation.policy.appTenantRestriction.discardPolicyRevision.json +123 -0
- models/mutation.policy.appTenantRestriction.moveRule.json +20 -0
- models/mutation.policy.appTenantRestriction.moveSection.json +103 -0
- models/mutation.policy.appTenantRestriction.publishPolicyRevision.json +123 -0
- models/mutation.policy.appTenantRestriction.removeRule.json +20 -0
- models/mutation.policy.appTenantRestriction.removeSection.json +103 -0
- models/mutation.policy.appTenantRestriction.updatePolicy.json +123 -0
- models/mutation.policy.appTenantRestriction.updateRule.json +20 -0
- models/mutation.policy.appTenantRestriction.updateSection.json +103 -0
- models/mutation.policy.applicationControl.addRule.json +20 -0
- models/mutation.policy.applicationControl.addSection.json +103 -0
- models/mutation.policy.applicationControl.createPolicyRevision.json +123 -0
- models/mutation.policy.applicationControl.discardPolicyRevision.json +123 -0
- models/mutation.policy.applicationControl.moveRule.json +20 -0
- models/mutation.policy.applicationControl.moveSection.json +103 -0
- models/mutation.policy.applicationControl.publishPolicyRevision.json +123 -0
- models/mutation.policy.applicationControl.removeRule.json +20 -0
- models/mutation.policy.applicationControl.removeSection.json +103 -0
- models/mutation.policy.applicationControl.updatePolicy.json +123 -0
- models/mutation.policy.applicationControl.updateRule.json +20 -0
- models/mutation.policy.applicationControl.updateSection.json +103 -0
- models/mutation.policy.dynamicIpAllocation.addRule.json +20 -0
- models/mutation.policy.dynamicIpAllocation.addSection.json +103 -0
- models/mutation.policy.dynamicIpAllocation.createPolicyRevision.json +123 -0
- models/mutation.policy.dynamicIpAllocation.discardPolicyRevision.json +123 -0
- models/mutation.policy.dynamicIpAllocation.moveRule.json +20 -0
- models/mutation.policy.dynamicIpAllocation.moveSection.json +103 -0
- models/mutation.policy.dynamicIpAllocation.publishPolicyRevision.json +123 -0
- models/mutation.policy.dynamicIpAllocation.removeRule.json +20 -0
- models/mutation.policy.dynamicIpAllocation.removeSection.json +103 -0
- models/mutation.policy.dynamicIpAllocation.updatePolicy.json +123 -0
- models/mutation.policy.dynamicIpAllocation.updateRule.json +20 -0
- models/mutation.policy.dynamicIpAllocation.updateSection.json +103 -0
- models/mutation.policy.internetFirewall.addRule.json +20 -0
- models/mutation.policy.internetFirewall.addSection.json +103 -0
- models/mutation.policy.internetFirewall.createPolicyRevision.json +123 -0
- models/mutation.policy.internetFirewall.discardPolicyRevision.json +123 -0
- models/mutation.policy.internetFirewall.moveRule.json +20 -0
- models/mutation.policy.internetFirewall.moveSection.json +103 -0
- models/mutation.policy.internetFirewall.publishPolicyRevision.json +123 -0
- models/mutation.policy.internetFirewall.removeRule.json +20 -0
- models/mutation.policy.internetFirewall.removeSection.json +103 -0
- models/mutation.policy.internetFirewall.updatePolicy.json +123 -0
- models/mutation.policy.internetFirewall.updateRule.json +20 -0
- models/mutation.policy.internetFirewall.updateSection.json +103 -0
- models/mutation.policy.remotePortFwd.addRule.json +20 -0
- models/mutation.policy.remotePortFwd.addSection.json +103 -0
- models/mutation.policy.remotePortFwd.createPolicyRevision.json +123 -0
- models/mutation.policy.remotePortFwd.discardPolicyRevision.json +123 -0
- models/mutation.policy.remotePortFwd.moveRule.json +20 -0
- models/mutation.policy.remotePortFwd.moveSection.json +103 -0
- models/mutation.policy.remotePortFwd.publishPolicyRevision.json +123 -0
- models/mutation.policy.remotePortFwd.removeRule.json +20 -0
- models/mutation.policy.remotePortFwd.removeSection.json +103 -0
- models/mutation.policy.remotePortFwd.updatePolicy.json +123 -0
- models/mutation.policy.remotePortFwd.updateRule.json +20 -0
- models/mutation.policy.remotePortFwd.updateSection.json +103 -0
- models/mutation.policy.socketLan.addRule.json +40 -0
- models/mutation.policy.socketLan.addSection.json +103 -0
- models/mutation.policy.socketLan.createPolicyRevision.json +143 -0
- models/mutation.policy.socketLan.discardPolicyRevision.json +143 -0
- models/mutation.policy.socketLan.moveRule.json +40 -0
- models/mutation.policy.socketLan.moveSection.json +103 -0
- models/mutation.policy.socketLan.publishPolicyRevision.json +143 -0
- models/mutation.policy.socketLan.removeRule.json +40 -0
- models/mutation.policy.socketLan.removeSection.json +103 -0
- models/mutation.policy.socketLan.updatePolicy.json +143 -0
- models/mutation.policy.socketLan.updateRule.json +40 -0
- models/mutation.policy.socketLan.updateSection.json +103 -0
- models/mutation.policy.terminalServer.addRule.json +20 -0
- models/mutation.policy.terminalServer.addSection.json +103 -0
- models/mutation.policy.terminalServer.createPolicyRevision.json +123 -0
- models/mutation.policy.terminalServer.discardPolicyRevision.json +123 -0
- models/mutation.policy.terminalServer.moveRule.json +20 -0
- models/mutation.policy.terminalServer.moveSection.json +103 -0
- models/mutation.policy.terminalServer.publishPolicyRevision.json +123 -0
- models/mutation.policy.terminalServer.removeRule.json +20 -0
- models/mutation.policy.terminalServer.removeSection.json +103 -0
- models/mutation.policy.terminalServer.updatePolicy.json +123 -0
- models/mutation.policy.terminalServer.updateRule.json +20 -0
- models/mutation.policy.terminalServer.updateSection.json +103 -0
- models/mutation.policy.tlsInspect.addRule.json +20 -0
- models/mutation.policy.tlsInspect.addSection.json +103 -0
- models/mutation.policy.tlsInspect.createPolicyRevision.json +123 -0
- models/mutation.policy.tlsInspect.discardPolicyRevision.json +123 -0
- models/mutation.policy.tlsInspect.moveRule.json +20 -0
- models/mutation.policy.tlsInspect.moveSection.json +103 -0
- models/mutation.policy.tlsInspect.publishPolicyRevision.json +123 -0
- models/mutation.policy.tlsInspect.removeRule.json +20 -0
- models/mutation.policy.tlsInspect.removeSection.json +103 -0
- models/mutation.policy.tlsInspect.updatePolicy.json +123 -0
- models/mutation.policy.tlsInspect.updateRule.json +20 -0
- models/mutation.policy.tlsInspect.updateSection.json +103 -0
- models/mutation.policy.wanFirewall.addRule.json +20 -0
- models/mutation.policy.wanFirewall.addSection.json +103 -0
- models/mutation.policy.wanFirewall.createPolicyRevision.json +123 -0
- models/mutation.policy.wanFirewall.discardPolicyRevision.json +123 -0
- models/mutation.policy.wanFirewall.moveRule.json +20 -0
- models/mutation.policy.wanFirewall.moveSection.json +103 -0
- models/mutation.policy.wanFirewall.publishPolicyRevision.json +123 -0
- models/mutation.policy.wanFirewall.removeRule.json +20 -0
- models/mutation.policy.wanFirewall.removeSection.json +103 -0
- models/mutation.policy.wanFirewall.updatePolicy.json +123 -0
- models/mutation.policy.wanFirewall.updateRule.json +20 -0
- models/mutation.policy.wanFirewall.updateSection.json +103 -0
- models/mutation.policy.wanNetwork.addRule.json +20 -0
- models/mutation.policy.wanNetwork.addSection.json +103 -0
- models/mutation.policy.wanNetwork.createPolicyRevision.json +123 -0
- models/mutation.policy.wanNetwork.discardPolicyRevision.json +123 -0
- models/mutation.policy.wanNetwork.moveRule.json +20 -0
- models/mutation.policy.wanNetwork.moveSection.json +103 -0
- models/mutation.policy.wanNetwork.publishPolicyRevision.json +123 -0
- models/mutation.policy.wanNetwork.removeRule.json +20 -0
- models/mutation.policy.wanNetwork.removeSection.json +103 -0
- models/mutation.policy.wanNetwork.updatePolicy.json +123 -0
- models/mutation.policy.wanNetwork.updateRule.json +20 -0
- models/mutation.policy.wanNetwork.updateSection.json +103 -0
- models/mutation.xdr.analystFeedback.json +822 -87
- models/query.policy.antiMalwareFileHash.policy.json +123 -0
- models/query.policy.appTenantRestriction.policy.json +123 -0
- models/query.policy.applicationControl.policy.json +123 -0
- models/query.policy.dynamicIpAllocation.policy.json +123 -0
- models/query.policy.internetFirewall.policy.json +123 -0
- models/query.policy.remotePortFwd.policy.json +123 -0
- models/query.policy.socketLan.policy.json +143 -0
- models/query.policy.terminalServer.policy.json +123 -0
- models/query.policy.tlsInspect.policy.json +123 -0
- models/query.policy.wanFirewall.policy.json +123 -0
- models/query.policy.wanNetwork.policy.json +123 -0
- models/query.xdr.stories.json +822 -87
- models/query.xdr.story.json +822 -87
- schema/catolib.py +34 -17
- catocli/Utils/csv_formatter.py +0 -663
- scripts/catolib.py +0 -62
- scripts/export_if_rules_to_json.py +0 -188
- scripts/export_wf_rules_to_json.py +0 -111
- scripts/import_wf_rules_to_tfstate.py +0 -331
- {catocli-3.0.14.dist-info → catocli-3.0.22.dist-info}/WHEEL +0 -0
- {catocli-3.0.14.dist-info → catocli-3.0.22.dist-info}/entry_points.txt +0 -0
- {catocli-3.0.14.dist-info → catocli-3.0.22.dist-info}/licenses/LICENSE +0 -0
|
@@ -38,25 +38,305 @@ catocli query eventsTimeSeries '{
|
|
|
38
38
|
}'
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
+
## Advanced Usage
|
|
42
|
+
### Additional Examples
|
|
43
|
+
- Weekly break down by hour of Internet Firewall events by rule_name
|
|
44
|
+
- Weekly hourly breakdown by hour of sum of site events
|
|
45
|
+
- 1 hour in 5 min increments of sum of site events used for detecting throttling
|
|
46
|
+
- Basic Event Count Query with enhanced formatting
|
|
47
|
+
- Basic Event Count Query - Returns formatted JSON with granularity-adjusted values
|
|
48
|
+
- Security Events Analysis
|
|
49
|
+
- Security Events Analysis - Daily breakdown of security events
|
|
50
|
+
- Connectivity Events by Country
|
|
51
|
+
- Connectivity Events by Country - Weekly breakdown with country dimensions
|
|
52
|
+
- Threat Analysis with Trend
|
|
53
|
+
- Threat Analysis with Trend - Monthly threat score analysis
|
|
54
|
+
- Socket Connectivity Analysis
|
|
55
|
+
- Socket Connectivity Analysis - Connection events by socket interface
|
|
56
|
+
|
|
57
|
+
# Weekly break down by hour of Internet Firewall events by rule_name
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# Weekly break down by hour of Internet Firewall events by rule_name
|
|
61
|
+
catocli query eventsTimeSeries '{
|
|
62
|
+
"buckets": 168,
|
|
63
|
+
"eventsDimension": [
|
|
64
|
+
{
|
|
65
|
+
"fieldName": "rule_name"
|
|
66
|
+
}
|
|
67
|
+
],
|
|
68
|
+
"eventsFilter": [
|
|
69
|
+
{
|
|
70
|
+
"fieldName": "event_sub_type",
|
|
71
|
+
"operator": "is",
|
|
72
|
+
"values": [
|
|
73
|
+
"Internet Firewall"
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
"eventsMeasure": [
|
|
78
|
+
{
|
|
79
|
+
"aggType": "sum",
|
|
80
|
+
"fieldName": "event_count"
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"timeFrame": "last.P7D"
|
|
84
|
+
}'
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
# Weekly hourly breakdown by hour of sum of site events
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
# Weekly hourly breakdown by hour of sum of site events
|
|
91
|
+
catocli query eventsTimeSeries -accountID=15412 '{
|
|
92
|
+
"buckets": 168,
|
|
93
|
+
"eventsDimension": [],
|
|
94
|
+
"eventsFilter": [
|
|
95
|
+
{
|
|
96
|
+
"fieldName": "src_is_site_or_vpn",
|
|
97
|
+
"operator": "is",
|
|
98
|
+
"values": [
|
|
99
|
+
"Site"
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"eventsMeasure": [
|
|
104
|
+
{
|
|
105
|
+
"aggType": "sum",
|
|
106
|
+
"fieldName": "event_count"
|
|
107
|
+
}
|
|
108
|
+
],
|
|
109
|
+
"timeFrame": "last.P7D"
|
|
110
|
+
}'
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
# 1 hour in 5 min increments of sum of site events used for detecting throttling
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# 1 hour in 5 min increments of sum of site events used for detecting throttling
|
|
118
|
+
catocli query eventsTimeSeries -accountID=15412 '{
|
|
119
|
+
"buckets": 12,
|
|
120
|
+
"eventsDimension": [],
|
|
121
|
+
"eventsFilter": [
|
|
122
|
+
{
|
|
123
|
+
"fieldName": "src_is_site_or_vpn",
|
|
124
|
+
"operator": "is",
|
|
125
|
+
"values": [
|
|
126
|
+
"Site"
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
],
|
|
130
|
+
"eventsMeasure": [
|
|
131
|
+
{
|
|
132
|
+
"aggType": "sum",
|
|
133
|
+
"fieldName": "event_count"
|
|
134
|
+
}
|
|
135
|
+
],
|
|
136
|
+
"timeFrame": "last.P1D"
|
|
137
|
+
}'
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
# Basic Event Count Query with enhanced formatting
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
# Basic Event Count Query - Returns formatted JSON with granularity-adjusted values
|
|
147
|
+
catocli query eventsTimeSeries '{
|
|
148
|
+
"buckets": 4,
|
|
149
|
+
"eventsDimension": [],
|
|
150
|
+
"eventsFilter": [],
|
|
151
|
+
"eventsMeasure": [
|
|
152
|
+
{
|
|
153
|
+
"aggType": "sum",
|
|
154
|
+
"fieldName": "event_count"
|
|
155
|
+
}
|
|
156
|
+
],
|
|
157
|
+
"timeFrame": "utc.2023-02-{28/00:00:00--28/23:59:59}"
|
|
158
|
+
}'
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
# Security Events Analysis
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
# Security Events Analysis - Daily breakdown of security events
|
|
165
|
+
catocli query eventsTimeSeries '{
|
|
166
|
+
"buckets": 24,
|
|
167
|
+
"eventsDimension": [],
|
|
168
|
+
"eventsFilter": [
|
|
169
|
+
{
|
|
170
|
+
"fieldName": "event_type",
|
|
171
|
+
"operator": "is",
|
|
172
|
+
"values": ["Security"]
|
|
173
|
+
}
|
|
174
|
+
],
|
|
175
|
+
"eventsMeasure": [
|
|
176
|
+
{
|
|
177
|
+
"aggType": "sum",
|
|
178
|
+
"fieldName": "event_count"
|
|
179
|
+
}
|
|
180
|
+
],
|
|
181
|
+
"timeFrame": "utc.2023-02-{28/00:00:00--28/23:59:59}"
|
|
182
|
+
}'
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
# Connectivity Events by Country
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
# Connectivity Events by Country - Weekly breakdown with country dimensions
|
|
189
|
+
catocli query eventsTimeSeries '{
|
|
190
|
+
"buckets": 7,
|
|
191
|
+
"eventsDimension": [
|
|
192
|
+
{
|
|
193
|
+
"fieldName": "src_country"
|
|
194
|
+
}
|
|
195
|
+
],
|
|
196
|
+
"eventsFilter": [
|
|
197
|
+
{
|
|
198
|
+
"fieldName": "event_type",
|
|
199
|
+
"operator": "is",
|
|
200
|
+
"values": ["Connectivity"]
|
|
201
|
+
}
|
|
202
|
+
],
|
|
203
|
+
"eventsMeasure": [
|
|
204
|
+
{
|
|
205
|
+
"aggType": "sum",
|
|
206
|
+
"fieldName": "event_count"
|
|
207
|
+
}
|
|
208
|
+
],
|
|
209
|
+
"timeFrame": "utc.2023-03-{01/00:00:00--07/23:59:59}"
|
|
210
|
+
}'
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
# Threat Analysis with Trend
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
# Threat Analysis with Trend - Monthly threat score analysis
|
|
217
|
+
catocli query eventsTimeSeries '{
|
|
218
|
+
"buckets": 31,
|
|
219
|
+
"eventsDimension": [],
|
|
220
|
+
"eventsFilter": [
|
|
221
|
+
{
|
|
222
|
+
"fieldName": "event_type",
|
|
223
|
+
"operator": "is",
|
|
224
|
+
"values": ["Security"]
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"fieldName": "threat_score",
|
|
228
|
+
"operator": "gt",
|
|
229
|
+
"values": ["50"]
|
|
230
|
+
}
|
|
231
|
+
],
|
|
232
|
+
"eventsMeasure": [
|
|
233
|
+
{
|
|
234
|
+
"aggType": "avg",
|
|
235
|
+
"fieldName": "threat_score"
|
|
236
|
+
}
|
|
237
|
+
],
|
|
238
|
+
"timeFrame": "utc.2023-01-{01/00:00:00--31/23:59:59}"
|
|
239
|
+
}'
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
# Socket Connectivity Analysis
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
# Socket Connectivity Analysis - Connection events by socket interface
|
|
246
|
+
catocli query eventsTimeSeries '{
|
|
247
|
+
"buckets": 28,
|
|
248
|
+
"eventsDimension": [
|
|
249
|
+
{
|
|
250
|
+
"fieldName": "socket_interface"
|
|
251
|
+
}
|
|
252
|
+
],
|
|
253
|
+
"eventsFilter": [
|
|
254
|
+
{
|
|
255
|
+
"fieldName": "event_type",
|
|
256
|
+
"operator": "is",
|
|
257
|
+
"values": ["Connectivity"]
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"fieldName": "event_sub_type",
|
|
261
|
+
"operator": "in",
|
|
262
|
+
"values": ["Connected", "Disconnected"]
|
|
263
|
+
}
|
|
264
|
+
],
|
|
265
|
+
"eventsMeasure": [
|
|
266
|
+
{
|
|
267
|
+
"aggType": "sum",
|
|
268
|
+
"fieldName": "event_count"
|
|
269
|
+
}
|
|
270
|
+
],
|
|
271
|
+
"timeFrame": "utc.2023-02-{01/00:00:00--28/23:59:59}"
|
|
272
|
+
}'
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
## Output Format Options
|
|
276
|
+
|
|
277
|
+
The eventsTimeSeries query supports multiple output formats:
|
|
278
|
+
|
|
279
|
+
### Enhanced JSON Format (default)
|
|
280
|
+
Returns formatted JSON with granularity multiplication applied to sum aggregations when appropriate:
|
|
281
|
+
```bash
|
|
282
|
+
catocli query eventsTimeSeries '{...}'
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### Raw JSON Format
|
|
286
|
+
Returns the original API response without formatting:
|
|
287
|
+
```bash
|
|
288
|
+
catocli query eventsTimeSeries '{...}' -raw
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### CSV Format
|
|
292
|
+
Exports data to CSV file with granularity-adjusted values:
|
|
293
|
+
```bash
|
|
294
|
+
catocli query eventsTimeSeries '{...}' -f csv
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### Custom CSV filename with timestamp
|
|
298
|
+
```bash
|
|
299
|
+
catocli query eventsTimeSeries '{...}' -f csv --csv-filename "my_events" --append-timestamp
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
## Granularity Multiplication
|
|
303
|
+
|
|
304
|
+
When using sum aggregations on count fields like `event_count`, the formatter automatically multiplies fractional values by the granularity period to provide meaningful totals. This is especially useful for time-series data where the API returns normalized values that need to be scaled to the actual time period.
|
|
305
|
+
|
|
306
|
+
**Example:**
|
|
307
|
+
- Original API value: 0.096 events per period
|
|
308
|
+
- Granularity: 3600 seconds (1 hour)
|
|
309
|
+
- Computed value: 0.096 × 3600 = 345.6 total events
|
|
310
|
+
|
|
311
|
+
Use the `-raw` flag to see the original unprocessed values if needed.
|
|
312
|
+
|
|
313
|
+
## Additional Resources
|
|
314
|
+
|
|
315
|
+
- [Cato API Documentation](https://api.catonetworks.com/documentation/#query-eventsTimeSeries)
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
|
|
41
321
|
|
|
42
322
|
#### TimeFrame Parameter Examples
|
|
43
323
|
|
|
44
324
|
The `timeFrame` parameter supports both relative time ranges and absolute date ranges:
|
|
45
325
|
|
|
46
326
|
**Relative Time Ranges:**
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
-
|
|
327
|
+
- "last.PT5M" = Previous 5 minutes
|
|
328
|
+
- "last.PT1H" = Previous 1 hour
|
|
329
|
+
- "last.P1D" = Previous 1 day
|
|
330
|
+
- "last.P14D" = Previous 14 days
|
|
331
|
+
- "last.P1M" = Previous 1 month
|
|
52
332
|
|
|
53
333
|
**Absolute Date Ranges:**
|
|
54
334
|
Format: `"utc.YYYY-MM-{DD/HH:MM:SS--DD/HH:MM:SS}"`
|
|
55
335
|
|
|
56
|
-
- Single day:
|
|
57
|
-
- Multiple days:
|
|
58
|
-
- Specific hours:
|
|
59
|
-
- Across months:
|
|
336
|
+
- Single day: "utc.2023-02-{28/00:00:00--28/23:59:59}"
|
|
337
|
+
- Multiple days: "utc.2023-02-{25/00:00:00--28/23:59:59}"
|
|
338
|
+
- Specific hours: "utc.2023-02-{28/09:00:00--28/17:00:00}"
|
|
339
|
+
- Across months: "utc.2023-{01-28/00:00:00--02-03/23:59:59}"
|
|
60
340
|
|
|
61
341
|
|
|
62
342
|
#### Operation Arguments for query.eventsTimeSeries ####
|
|
@@ -16,4 +16,10 @@ def query_eventsTimeSeries_parse(query_subparsers):
|
|
|
16
16
|
query_eventsTimeSeries_parser.add_argument('-z', '--sentinel', dest='sentinel', help='Send events to Sentinel customerid:sharedkey')
|
|
17
17
|
query_eventsTimeSeries_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
|
|
18
18
|
query_eventsTimeSeries_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
query_eventsTimeSeries_parser.add_argument('-f', '--format', choices=['json', 'csv'], help='Output format (default: formatted json, use -raw for original json)')
|
|
22
|
+
query_eventsTimeSeries_parser.add_argument('-raw', '--raw', dest='raw_output', action='store_true', help='Return raw/original JSON format (bypasses default formatting)')
|
|
23
|
+
query_eventsTimeSeries_parser.add_argument('--csv-filename', dest='csv_filename', help='Override CSV file name (default: eventstimeseries.csv)')
|
|
24
|
+
query_eventsTimeSeries_parser.add_argument('--append-timestamp', dest='append_timestamp', action='store_true', help='Append timestamp to the CSV file name')
|
|
19
25
|
query_eventsTimeSeries_parser.set_defaults(func=createRequest,operation_name='query.eventsTimeSeries')
|
|
@@ -30,27 +30,6 @@ def query_policy_parse(query_subparsers):
|
|
|
30
30
|
query_policy_antiMalwareFileHash_policy_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
|
|
31
31
|
query_policy_antiMalwareFileHash_policy_parser.set_defaults(func=createRequest,operation_name='query.policy.antiMalwareFileHash.policy')
|
|
32
32
|
|
|
33
|
-
query_policy_dynamicIpAllocation_parser = query_policy_subparsers.add_parser('dynamicIpAllocation',
|
|
34
|
-
help='dynamicIpAllocation() policy operation',
|
|
35
|
-
usage=get_help("query_policy_dynamicIpAllocation"))
|
|
36
|
-
|
|
37
|
-
query_policy_dynamicIpAllocation_subparsers = query_policy_dynamicIpAllocation_parser.add_subparsers()
|
|
38
|
-
|
|
39
|
-
query_policy_dynamicIpAllocation_policy_parser = query_policy_dynamicIpAllocation_subparsers.add_parser('policy',
|
|
40
|
-
help='policy() dynamicIpAllocation operation',
|
|
41
|
-
usage=get_help("query_policy_dynamicIpAllocation_policy"))
|
|
42
|
-
|
|
43
|
-
query_policy_dynamicIpAllocation_policy_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
|
|
44
|
-
query_policy_dynamicIpAllocation_policy_parser.add_argument('-accountID', help='The cato account ID to use for this operation. Overrides the account_id value in the profile setting. This is use for reseller and MSP accounts to run queries against cato sub accounts from the parent account.')
|
|
45
|
-
query_policy_dynamicIpAllocation_policy_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
|
|
46
|
-
query_policy_dynamicIpAllocation_policy_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
|
|
47
|
-
query_policy_dynamicIpAllocation_policy_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
|
|
48
|
-
query_policy_dynamicIpAllocation_policy_parser.add_argument('-n', '--stream-events', dest='stream_events', help='Send events over network to host:port TCP')
|
|
49
|
-
query_policy_dynamicIpAllocation_policy_parser.add_argument('-z', '--sentinel', dest='sentinel', help='Send events to Sentinel customerid:sharedkey')
|
|
50
|
-
query_policy_dynamicIpAllocation_policy_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
|
|
51
|
-
query_policy_dynamicIpAllocation_policy_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
|
|
52
|
-
query_policy_dynamicIpAllocation_policy_parser.set_defaults(func=createRequest,operation_name='query.policy.dynamicIpAllocation.policy')
|
|
53
|
-
|
|
54
33
|
query_policy_socketLan_parser = query_policy_subparsers.add_parser('socketLan',
|
|
55
34
|
help='socketLan() policy operation',
|
|
56
35
|
usage=get_help("query_policy_socketLan"))
|
|
@@ -72,27 +51,6 @@ def query_policy_parse(query_subparsers):
|
|
|
72
51
|
query_policy_socketLan_policy_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
|
|
73
52
|
query_policy_socketLan_policy_parser.set_defaults(func=createRequest,operation_name='query.policy.socketLan.policy')
|
|
74
53
|
|
|
75
|
-
query_policy_terminalServer_parser = query_policy_subparsers.add_parser('terminalServer',
|
|
76
|
-
help='terminalServer() policy operation',
|
|
77
|
-
usage=get_help("query_policy_terminalServer"))
|
|
78
|
-
|
|
79
|
-
query_policy_terminalServer_subparsers = query_policy_terminalServer_parser.add_subparsers()
|
|
80
|
-
|
|
81
|
-
query_policy_terminalServer_policy_parser = query_policy_terminalServer_subparsers.add_parser('policy',
|
|
82
|
-
help='policy() terminalServer operation',
|
|
83
|
-
usage=get_help("query_policy_terminalServer_policy"))
|
|
84
|
-
|
|
85
|
-
query_policy_terminalServer_policy_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
|
|
86
|
-
query_policy_terminalServer_policy_parser.add_argument('-accountID', help='The cato account ID to use for this operation. Overrides the account_id value in the profile setting. This is use for reseller and MSP accounts to run queries against cato sub accounts from the parent account.')
|
|
87
|
-
query_policy_terminalServer_policy_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
|
|
88
|
-
query_policy_terminalServer_policy_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
|
|
89
|
-
query_policy_terminalServer_policy_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
|
|
90
|
-
query_policy_terminalServer_policy_parser.add_argument('-n', '--stream-events', dest='stream_events', help='Send events over network to host:port TCP')
|
|
91
|
-
query_policy_terminalServer_policy_parser.add_argument('-z', '--sentinel', dest='sentinel', help='Send events to Sentinel customerid:sharedkey')
|
|
92
|
-
query_policy_terminalServer_policy_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
|
|
93
|
-
query_policy_terminalServer_policy_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
|
|
94
|
-
query_policy_terminalServer_policy_parser.set_defaults(func=createRequest,operation_name='query.policy.terminalServer.policy')
|
|
95
|
-
|
|
96
54
|
query_policy_wanNetwork_parser = query_policy_subparsers.add_parser('wanNetwork',
|
|
97
55
|
help='wanNetwork() policy operation',
|
|
98
56
|
usage=get_help("query_policy_wanNetwork"))
|
|
@@ -239,3 +197,45 @@ def query_policy_parse(query_subparsers):
|
|
|
239
197
|
query_policy_tlsInspect_policy_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
|
|
240
198
|
query_policy_tlsInspect_policy_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
|
|
241
199
|
query_policy_tlsInspect_policy_parser.set_defaults(func=createRequest,operation_name='query.policy.tlsInspect.policy')
|
|
200
|
+
|
|
201
|
+
query_policy_dynamicIpAllocation_parser = query_policy_subparsers.add_parser('dynamicIpAllocation',
|
|
202
|
+
help='dynamicIpAllocation() policy operation',
|
|
203
|
+
usage=get_help("query_policy_dynamicIpAllocation"))
|
|
204
|
+
|
|
205
|
+
query_policy_dynamicIpAllocation_subparsers = query_policy_dynamicIpAllocation_parser.add_subparsers()
|
|
206
|
+
|
|
207
|
+
query_policy_dynamicIpAllocation_policy_parser = query_policy_dynamicIpAllocation_subparsers.add_parser('policy',
|
|
208
|
+
help='policy() dynamicIpAllocation operation',
|
|
209
|
+
usage=get_help("query_policy_dynamicIpAllocation_policy"))
|
|
210
|
+
|
|
211
|
+
query_policy_dynamicIpAllocation_policy_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
|
|
212
|
+
query_policy_dynamicIpAllocation_policy_parser.add_argument('-accountID', help='The cato account ID to use for this operation. Overrides the account_id value in the profile setting. This is use for reseller and MSP accounts to run queries against cato sub accounts from the parent account.')
|
|
213
|
+
query_policy_dynamicIpAllocation_policy_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
|
|
214
|
+
query_policy_dynamicIpAllocation_policy_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
|
|
215
|
+
query_policy_dynamicIpAllocation_policy_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
|
|
216
|
+
query_policy_dynamicIpAllocation_policy_parser.add_argument('-n', '--stream-events', dest='stream_events', help='Send events over network to host:port TCP')
|
|
217
|
+
query_policy_dynamicIpAllocation_policy_parser.add_argument('-z', '--sentinel', dest='sentinel', help='Send events to Sentinel customerid:sharedkey')
|
|
218
|
+
query_policy_dynamicIpAllocation_policy_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
|
|
219
|
+
query_policy_dynamicIpAllocation_policy_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
|
|
220
|
+
query_policy_dynamicIpAllocation_policy_parser.set_defaults(func=createRequest,operation_name='query.policy.dynamicIpAllocation.policy')
|
|
221
|
+
|
|
222
|
+
query_policy_terminalServer_parser = query_policy_subparsers.add_parser('terminalServer',
|
|
223
|
+
help='terminalServer() policy operation',
|
|
224
|
+
usage=get_help("query_policy_terminalServer"))
|
|
225
|
+
|
|
226
|
+
query_policy_terminalServer_subparsers = query_policy_terminalServer_parser.add_subparsers()
|
|
227
|
+
|
|
228
|
+
query_policy_terminalServer_policy_parser = query_policy_terminalServer_subparsers.add_parser('policy',
|
|
229
|
+
help='policy() terminalServer operation',
|
|
230
|
+
usage=get_help("query_policy_terminalServer_policy"))
|
|
231
|
+
|
|
232
|
+
query_policy_terminalServer_policy_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
|
|
233
|
+
query_policy_terminalServer_policy_parser.add_argument('-accountID', help='The cato account ID to use for this operation. Overrides the account_id value in the profile setting. This is use for reseller and MSP accounts to run queries against cato sub accounts from the parent account.')
|
|
234
|
+
query_policy_terminalServer_policy_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
|
|
235
|
+
query_policy_terminalServer_policy_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
|
|
236
|
+
query_policy_terminalServer_policy_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
|
|
237
|
+
query_policy_terminalServer_policy_parser.add_argument('-n', '--stream-events', dest='stream_events', help='Send events over network to host:port TCP')
|
|
238
|
+
query_policy_terminalServer_policy_parser.add_argument('-z', '--sentinel', dest='sentinel', help='Send events to Sentinel customerid:sharedkey')
|
|
239
|
+
query_policy_terminalServer_policy_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
|
|
240
|
+
query_policy_terminalServer_policy_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
|
|
241
|
+
query_policy_terminalServer_policy_parser.set_defaults(func=createRequest,operation_name='query.policy.terminalServer.policy')
|
|
@@ -40,25 +40,69 @@ catocli query socketPortMetrics '{
|
|
|
40
40
|
}'
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
+
## Advanced Usage
|
|
44
|
+
### Additional Examples
|
|
45
|
+
- 1 Day sum of traffic by site, socket_interface, device_id
|
|
46
|
+
|
|
47
|
+
# 1 Day sum of traffic by site, socket_interface, device_id
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# 1 Day sum of traffic by site, socket_interface, device_id
|
|
51
|
+
catocli query socketPortMetrics '{
|
|
52
|
+
"socketPortMetricsDimension": [
|
|
53
|
+
{
|
|
54
|
+
"fieldName": "socket_interface"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"fieldName": "device_id"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"fieldName": "site_id"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"fieldName": "site_name"
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"socketPortMetricsFilter": [],
|
|
67
|
+
"socketPortMetricsMeasure": [
|
|
68
|
+
{
|
|
69
|
+
"aggType": "sum",
|
|
70
|
+
"fieldName": "bytes_upstream"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"aggType": "sum",
|
|
74
|
+
"fieldName": "bytes_downstream"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"aggType": "sum",
|
|
78
|
+
"fieldName": "bytes_total"
|
|
79
|
+
}
|
|
80
|
+
],
|
|
81
|
+
"socketPortMetricsSort": [],
|
|
82
|
+
"timeFrame": "last.P1D"
|
|
83
|
+
}'
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
|
|
43
87
|
|
|
44
88
|
#### TimeFrame Parameter Examples
|
|
45
89
|
|
|
46
90
|
The `timeFrame` parameter supports both relative time ranges and absolute date ranges:
|
|
47
91
|
|
|
48
92
|
**Relative Time Ranges:**
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
-
|
|
52
|
-
-
|
|
53
|
-
-
|
|
93
|
+
- "last.PT5M" = Previous 5 minutes
|
|
94
|
+
- "last.PT1H" = Previous 1 hour
|
|
95
|
+
- "last.P1D" = Previous 1 day
|
|
96
|
+
- "last.P14D" = Previous 14 days
|
|
97
|
+
- "last.P1M" = Previous 1 month
|
|
54
98
|
|
|
55
99
|
**Absolute Date Ranges:**
|
|
56
100
|
Format: `"utc.YYYY-MM-{DD/HH:MM:SS--DD/HH:MM:SS}"`
|
|
57
101
|
|
|
58
|
-
- Single day:
|
|
59
|
-
- Multiple days:
|
|
60
|
-
- Specific hours:
|
|
61
|
-
- Across months:
|
|
102
|
+
- Single day: "utc.2023-02-{28/00:00:00--28/23:59:59}"
|
|
103
|
+
- Multiple days: "utc.2023-02-{25/00:00:00--28/23:59:59}"
|
|
104
|
+
- Specific hours: "utc.2023-02-{28/09:00:00--28/17:00:00}"
|
|
105
|
+
- Across months: "utc.2023-{01-28/00:00:00--02-03/23:59:59}"
|
|
62
106
|
|
|
63
107
|
|
|
64
108
|
#### Operation Arguments for query.socketPortMetrics ####
|
|
@@ -16,4 +16,10 @@ def query_socketPortMetrics_parse(query_subparsers):
|
|
|
16
16
|
query_socketPortMetrics_parser.add_argument('-z', '--sentinel', dest='sentinel', help='Send events to Sentinel customerid:sharedkey')
|
|
17
17
|
query_socketPortMetrics_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
|
|
18
18
|
query_socketPortMetrics_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
query_socketPortMetrics_parser.add_argument('-f', '--format', choices=['json', 'csv'], help='Output format (default: formatted json, use -raw for original json)')
|
|
22
|
+
query_socketPortMetrics_parser.add_argument('-raw', '--raw', dest='raw_output', action='store_true', help='Return raw/original JSON format (bypasses default formatting)')
|
|
23
|
+
query_socketPortMetrics_parser.add_argument('--csv-filename', dest='csv_filename', help='Override CSV file name (default: socketportmetrics.csv)')
|
|
24
|
+
query_socketPortMetrics_parser.add_argument('--append-timestamp', dest='append_timestamp', action='store_true', help='Append timestamp to the CSV file name')
|
|
19
25
|
query_socketPortMetrics_parser.set_defaults(func=createRequest,operation_name='query.socketPortMetrics')
|
|
@@ -38,25 +38,108 @@ catocli query socketPortMetricsTimeSeries '{
|
|
|
38
38
|
}'
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
+
## Advanced Usage
|
|
42
|
+
### Additional Examples
|
|
43
|
+
- 1 Day sum of traffic by site, socket_interface, device_id
|
|
44
|
+
- 1 Day sum of traffic by site, socket_interface, device_id as csv
|
|
45
|
+
|
|
46
|
+
# 1 Day sum of traffic by site, socket_interface, device_id
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# 1 Day sum of traffic by site, socket_interface, device_id as csv
|
|
50
|
+
catocli query socketPortMetricsTimeSeries
|
|
51
|
+
"buckets": 24,
|
|
52
|
+
"socketPortMetricsDimension": [
|
|
53
|
+
{
|
|
54
|
+
"fieldName": "socket_interface"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"fieldName": "device_id"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"fieldName": "site_id"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"fieldName": "site_name"
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"socketPortMetricsFilter": [],
|
|
67
|
+
"socketPortMetricsMeasure": [
|
|
68
|
+
{
|
|
69
|
+
"aggType": "sum",
|
|
70
|
+
"fieldName": "bytes_downstream"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"aggType": "sum",
|
|
74
|
+
"fieldName": "bytes_upstream"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"aggType": "sum",
|
|
78
|
+
"fieldName": "bytes_total"
|
|
79
|
+
}
|
|
80
|
+
],
|
|
81
|
+
"timeFrame": "last.P1D"
|
|
82
|
+
}' -f csv
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
# 1 Day sum of traffic by site, socket_interface, device_id
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# 1 Day sum of traffic by site, socket_interface, device_id
|
|
89
|
+
catocli query socketPortMetricsTimeSeries '{
|
|
90
|
+
"buckets": 120,
|
|
91
|
+
"socketPortMetricsDimension": [
|
|
92
|
+
{
|
|
93
|
+
"fieldName": "socket_interface"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"fieldName": "device_id"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"fieldName": "site_id"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"fieldName": "site_name"
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
"socketPortMetricsFilter": [],
|
|
106
|
+
"socketPortMetricsMeasure": [
|
|
107
|
+
{
|
|
108
|
+
"aggType": "sum",
|
|
109
|
+
"fieldName": "throughput_downstream"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"aggType": "sum",
|
|
113
|
+
"fieldName": "throughput_upstream"
|
|
114
|
+
}
|
|
115
|
+
],
|
|
116
|
+
"timeFrame": "last.P2M"
|
|
117
|
+
}'
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
41
124
|
|
|
42
125
|
#### TimeFrame Parameter Examples
|
|
43
126
|
|
|
44
127
|
The `timeFrame` parameter supports both relative time ranges and absolute date ranges:
|
|
45
128
|
|
|
46
129
|
**Relative Time Ranges:**
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
-
|
|
130
|
+
- "last.PT5M" = Previous 5 minutes
|
|
131
|
+
- "last.PT1H" = Previous 1 hour
|
|
132
|
+
- "last.P1D" = Previous 1 day
|
|
133
|
+
- "last.P14D" = Previous 14 days
|
|
134
|
+
- "last.P1M" = Previous 1 month
|
|
52
135
|
|
|
53
136
|
**Absolute Date Ranges:**
|
|
54
137
|
Format: `"utc.YYYY-MM-{DD/HH:MM:SS--DD/HH:MM:SS}"`
|
|
55
138
|
|
|
56
|
-
- Single day:
|
|
57
|
-
- Multiple days:
|
|
58
|
-
- Specific hours:
|
|
59
|
-
- Across months:
|
|
139
|
+
- Single day: "utc.2023-02-{28/00:00:00--28/23:59:59}"
|
|
140
|
+
- Multiple days: "utc.2023-02-{25/00:00:00--28/23:59:59}"
|
|
141
|
+
- Specific hours: "utc.2023-02-{28/09:00:00--28/17:00:00}"
|
|
142
|
+
- Across months: "utc.2023-{01-28/00:00:00--02-03/23:59:59}"
|
|
60
143
|
|
|
61
144
|
|
|
62
145
|
#### Operation Arguments for query.socketPortMetricsTimeSeries ####
|
|
@@ -17,7 +17,9 @@ def query_socketPortMetricsTimeSeries_parse(query_subparsers):
|
|
|
17
17
|
query_socketPortMetricsTimeSeries_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
|
|
18
18
|
query_socketPortMetricsTimeSeries_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
query_socketPortMetricsTimeSeries_parser.add_argument('
|
|
20
|
+
|
|
21
|
+
query_socketPortMetricsTimeSeries_parser.add_argument('-f', '--format', choices=['json', 'csv'], help='Output format (default: formatted json, use -raw for original json)')
|
|
22
|
+
query_socketPortMetricsTimeSeries_parser.add_argument('-raw', '--raw', dest='raw_output', action='store_true', help='Return raw/original JSON format (bypasses default formatting)')
|
|
23
|
+
query_socketPortMetricsTimeSeries_parser.add_argument('--csv-filename', dest='csv_filename', help='Override CSV file name (default: socketportmetricstimeseries.csv)')
|
|
22
24
|
query_socketPortMetricsTimeSeries_parser.add_argument('--append-timestamp', dest='append_timestamp', action='store_true', help='Append timestamp to the CSV file name')
|
|
23
25
|
query_socketPortMetricsTimeSeries_parser.set_defaults(func=createRequest,operation_name='query.socketPortMetricsTimeSeries')
|