catocli 3.0.24__py3-none-any.whl → 3.0.26__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 +10 -10
- catocli/Utils/formatter_app_stats.py +29 -16
- catocli/Utils/formatter_app_stats_timeseries.py +15 -23
- catocli/Utils/formatter_utils.py +1 -0
- catocli/__init__.py +1 -1
- catocli/clisettings.json +2 -1
- catocli/parsers/query_appStatsTimeSeries/README.md +2 -0
- catocli/parsers/query_container/__init__.py +118 -10
- catocli/parsers/query_container_fqdn_downloadFile/README.md +27 -0
- catocli/parsers/query_container_fqdn_search/README.md +29 -0
- catocli/parsers/query_container_fqdn_searchFqdn/README.md +26 -0
- catocli/parsers/query_container_ipAddressRange_downloadFile/README.md +27 -0
- catocli/parsers/query_container_ipAddressRange_search/README.md +29 -0
- catocli/parsers/query_container_ipAddressRange_searchIpAddressRange/README.md +29 -0
- catocli/parsers/query_container_list/README.md +30 -0
- {catocli-3.0.24.dist-info → catocli-3.0.26.dist-info}/METADATA +2 -5
- {catocli-3.0.24.dist-info → catocli-3.0.26.dist-info}/RECORD +30 -17
- models/query.appStats.json +216 -0
- models/query.appStatsTimeSeries.json +144 -0
- models/query.container.fqdn.downloadFile.json +519 -0
- models/query.container.fqdn.search.json +790 -0
- models/query.container.fqdn.searchFqdn.json +567 -0
- models/query.container.ipAddressRange.downloadFile.json +519 -0
- models/query.container.ipAddressRange.search.json +790 -0
- models/query.container.ipAddressRange.searchIpAddressRange.json +720 -0
- models/query.container.list.json +1316 -0
- catocli/parsers/query_container/README.md +0 -65
- {catocli-3.0.24.dist-info → catocli-3.0.26.dist-info}/WHEEL +0 -0
- {catocli-3.0.24.dist-info → catocli-3.0.26.dist-info}/entry_points.txt +0 -0
- {catocli-3.0.24.dist-info → catocli-3.0.26.dist-info}/licenses/LICENSE +0 -0
- {catocli-3.0.24.dist-info → catocli-3.0.26.dist-info}/top_level.txt +0 -0
catocli/Utils/clidriver.py
CHANGED
|
@@ -29,7 +29,6 @@ from ..parsers.query_hardwareManagement import query_hardwareManagement_parse
|
|
|
29
29
|
from ..parsers.query_events import query_events_parse
|
|
30
30
|
from ..parsers.query_eventsTimeSeries import query_eventsTimeSeries_parse
|
|
31
31
|
from ..parsers.query_auditFeed import query_auditFeed_parse
|
|
32
|
-
from ..parsers.query_container import query_container_parse
|
|
33
32
|
from ..parsers.query_admins import query_admins_parse
|
|
34
33
|
from ..parsers.query_entityLookup import query_entityLookup_parse
|
|
35
34
|
from ..parsers.query_accountRoles import query_accountRoles_parse
|
|
@@ -50,13 +49,14 @@ from ..parsers.query_accountSnapshot import query_accountSnapshot_parse
|
|
|
50
49
|
from ..parsers.query_catalogs import query_catalogs_parse
|
|
51
50
|
from ..parsers.query_site import query_site_parse
|
|
52
51
|
from ..parsers.query_xdr import query_xdr_parse
|
|
53
|
-
from ..parsers.query_groups import query_groups_parse
|
|
54
52
|
from ..parsers.query_policy import query_policy_parse
|
|
53
|
+
from ..parsers.query_container import query_container_parse
|
|
54
|
+
from ..parsers.query_groups import query_groups_parse
|
|
55
55
|
from ..parsers.mutation_xdr import mutation_xdr_parse
|
|
56
|
-
from ..parsers.mutation_policy import mutation_policy_parse
|
|
57
|
-
from ..parsers.mutation_site import mutation_site_parse
|
|
58
|
-
from ..parsers.mutation_container import mutation_container_parse
|
|
59
56
|
from ..parsers.mutation_sites import mutation_sites_parse
|
|
57
|
+
from ..parsers.mutation_container import mutation_container_parse
|
|
58
|
+
from ..parsers.mutation_site import mutation_site_parse
|
|
59
|
+
from ..parsers.mutation_policy import mutation_policy_parse
|
|
60
60
|
from ..parsers.mutation_admin import mutation_admin_parse
|
|
61
61
|
from ..parsers.mutation_accountManagement import mutation_accountManagement_parse
|
|
62
62
|
from ..parsers.mutation_sandbox import mutation_sandbox_parse
|
|
@@ -164,7 +164,6 @@ query_hardwareManagement_parser = query_hardwareManagement_parse(query_subparser
|
|
|
164
164
|
query_events_parser = query_events_parse(query_subparsers)
|
|
165
165
|
query_eventsTimeSeries_parser = query_eventsTimeSeries_parse(query_subparsers)
|
|
166
166
|
query_auditFeed_parser = query_auditFeed_parse(query_subparsers)
|
|
167
|
-
query_container_parser = query_container_parse(query_subparsers)
|
|
168
167
|
query_admins_parser = query_admins_parse(query_subparsers)
|
|
169
168
|
query_entityLookup_parser = query_entityLookup_parse(query_subparsers)
|
|
170
169
|
query_accountRoles_parser = query_accountRoles_parse(query_subparsers)
|
|
@@ -185,13 +184,14 @@ query_accountSnapshot_parser = query_accountSnapshot_parse(query_subparsers)
|
|
|
185
184
|
query_catalogs_parser = query_catalogs_parse(query_subparsers)
|
|
186
185
|
query_site_parser = query_site_parse(query_subparsers)
|
|
187
186
|
query_xdr_parser = query_xdr_parse(query_subparsers)
|
|
188
|
-
query_groups_parser = query_groups_parse(query_subparsers)
|
|
189
187
|
query_policy_parser = query_policy_parse(query_subparsers)
|
|
188
|
+
query_container_parser = query_container_parse(query_subparsers)
|
|
189
|
+
query_groups_parser = query_groups_parse(query_subparsers)
|
|
190
190
|
mutation_xdr_parser = mutation_xdr_parse(mutation_subparsers)
|
|
191
|
-
mutation_policy_parser = mutation_policy_parse(mutation_subparsers)
|
|
192
|
-
mutation_site_parser = mutation_site_parse(mutation_subparsers)
|
|
193
|
-
mutation_container_parser = mutation_container_parse(mutation_subparsers)
|
|
194
191
|
mutation_sites_parser = mutation_sites_parse(mutation_subparsers)
|
|
192
|
+
mutation_container_parser = mutation_container_parse(mutation_subparsers)
|
|
193
|
+
mutation_site_parser = mutation_site_parse(mutation_subparsers)
|
|
194
|
+
mutation_policy_parser = mutation_policy_parse(mutation_subparsers)
|
|
195
195
|
mutation_admin_parser = mutation_admin_parse(mutation_subparsers)
|
|
196
196
|
mutation_accountManagement_parser = mutation_accountManagement_parse(mutation_subparsers)
|
|
197
197
|
mutation_sandbox_parser = mutation_sandbox_parse(mutation_subparsers)
|
|
@@ -14,12 +14,12 @@ from typing import Dict, List, Any
|
|
|
14
14
|
|
|
15
15
|
# Import shared utility functions
|
|
16
16
|
try:
|
|
17
|
-
from .formatter_utils import convert_bytes_to_mb
|
|
17
|
+
from .formatter_utils import convert_bytes_to_mb, is_bytes_measure
|
|
18
18
|
except ImportError:
|
|
19
19
|
try:
|
|
20
|
-
from catocli.Utils.formatter_utils import convert_bytes_to_mb
|
|
20
|
+
from catocli.Utils.formatter_utils import convert_bytes_to_mb, is_bytes_measure
|
|
21
21
|
except ImportError:
|
|
22
|
-
from formatter_utils import convert_bytes_to_mb
|
|
22
|
+
from formatter_utils import convert_bytes_to_mb, is_bytes_measure
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
def format_app_stats(response_data: Dict[str, Any], output_format: str = 'json') -> str:
|
|
@@ -89,24 +89,27 @@ def _format_app_stats_to_json(response_data: Dict[str, Any]) -> str:
|
|
|
89
89
|
record_data = {}
|
|
90
90
|
|
|
91
91
|
for i, (field, value) in enumerate(fields_map.items()):
|
|
92
|
-
#
|
|
93
|
-
if
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
# Check if this is a bytes field using both unit type and field name
|
|
93
|
+
unit_type = record_unit_types[i] if i < len(record_unit_types) else "unknown"
|
|
94
|
+
is_bytes_field = (unit_type == 'bytes') or is_bytes_measure(field, unit_type)
|
|
95
|
+
|
|
96
|
+
if is_bytes_field:
|
|
97
|
+
try:
|
|
98
|
+
formatted_mb = convert_bytes_to_mb(value)
|
|
96
99
|
record_data[field] = {
|
|
97
100
|
"value": value,
|
|
98
101
|
"formatted_mb": formatted_mb,
|
|
99
102
|
"unit_type": "bytes"
|
|
100
103
|
}
|
|
101
|
-
|
|
104
|
+
except (ValueError, ZeroDivisionError):
|
|
102
105
|
record_data[field] = {
|
|
103
106
|
"value": value,
|
|
104
|
-
"unit_type": "
|
|
107
|
+
"unit_type": "bytes_err"
|
|
105
108
|
}
|
|
106
109
|
else:
|
|
107
110
|
record_data[field] = {
|
|
108
111
|
"value": value,
|
|
109
|
-
"unit_type":
|
|
112
|
+
"unit_type": unit_type
|
|
110
113
|
}
|
|
111
114
|
|
|
112
115
|
organized_data["appStats"]["records"].append(record_data)
|
|
@@ -155,7 +158,10 @@ def _format_app_stats_to_csv(response_data: Dict[str, Any]) -> str:
|
|
|
155
158
|
# Create headers with _mb suffix for bytes fields
|
|
156
159
|
headers = []
|
|
157
160
|
for i, field_name in enumerate(field_names):
|
|
158
|
-
if i < len(field_unit_types)
|
|
161
|
+
unit_type = field_unit_types[i] if i < len(field_unit_types) else "unknown"
|
|
162
|
+
is_bytes_field = (unit_type == 'bytes') or is_bytes_measure(field_name, unit_type)
|
|
163
|
+
|
|
164
|
+
if is_bytes_field:
|
|
159
165
|
headers.append(f'{field_name}_mb')
|
|
160
166
|
else:
|
|
161
167
|
headers.append(field_name)
|
|
@@ -172,12 +178,19 @@ def _format_app_stats_to_csv(response_data: Dict[str, Any]) -> str:
|
|
|
172
178
|
for i, field in enumerate(field_names):
|
|
173
179
|
value = fields_map.get(field, '')
|
|
174
180
|
|
|
175
|
-
#
|
|
176
|
-
if
|
|
177
|
-
|
|
178
|
-
|
|
181
|
+
# Check if this is a bytes field using both unit type and field name
|
|
182
|
+
unit_type = record_unit_types[i] if i < len(record_unit_types) else "unknown"
|
|
183
|
+
is_bytes_field = (unit_type == 'bytes') or is_bytes_measure(field, unit_type)
|
|
184
|
+
|
|
185
|
+
# Convert bytes to MB if the field is a bytes field
|
|
186
|
+
if is_bytes_field:
|
|
187
|
+
try:
|
|
188
|
+
formatted_value = convert_bytes_to_mb(value) if value != '' else ''
|
|
189
|
+
row.append(formatted_value)
|
|
190
|
+
except (ValueError, ZeroDivisionError):
|
|
191
|
+
row.append(str(value) if value != '' else '')
|
|
179
192
|
else:
|
|
180
|
-
row.append(value)
|
|
193
|
+
row.append(str(value) if value != '' else '')
|
|
181
194
|
|
|
182
195
|
writer.writerow(row)
|
|
183
196
|
|
|
@@ -16,12 +16,12 @@ from typing import Dict, List, Any, Tuple
|
|
|
16
16
|
|
|
17
17
|
# Import shared utility functions
|
|
18
18
|
try:
|
|
19
|
-
from .formatter_utils import format_timestamp, parse_label_for_dimensions_and_measure
|
|
19
|
+
from .formatter_utils import format_timestamp, parse_label_for_dimensions_and_measure, is_bytes_measure, convert_bytes_to_mb
|
|
20
20
|
except ImportError:
|
|
21
21
|
try:
|
|
22
|
-
from catocli.Utils.formatter_utils import format_timestamp, parse_label_for_dimensions_and_measure
|
|
22
|
+
from catocli.Utils.formatter_utils import format_timestamp, parse_label_for_dimensions_and_measure, is_bytes_measure, convert_bytes_to_mb
|
|
23
23
|
except ImportError:
|
|
24
|
-
from formatter_utils import format_timestamp, parse_label_for_dimensions_and_measure
|
|
24
|
+
from formatter_utils import format_timestamp, parse_label_for_dimensions_and_measure, is_bytes_measure, convert_bytes_to_mb
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
def format_app_stats_timeseries(response_data: Dict[str, Any], output_format: str = 'json') -> str:
|
|
@@ -170,20 +170,18 @@ def _format_app_stats_timeseries_to_json(response_data: Dict[str, Any]) -> str:
|
|
|
170
170
|
for timestamp, value in measure_data['data'].items():
|
|
171
171
|
timestamp_str = format_timestamp(timestamp)
|
|
172
172
|
|
|
173
|
-
if measure
|
|
173
|
+
if is_bytes_measure(measure):
|
|
174
174
|
try:
|
|
175
|
-
|
|
176
|
-
# mb_value = float(value) / 1048576
|
|
177
|
-
formatted_value = f"{mb_value:.3f}".rstrip('0').rstrip('.')
|
|
175
|
+
converted_value = convert_bytes_to_mb(value)
|
|
178
176
|
formatted_data[timestamp_str] = {
|
|
179
177
|
'value': value,
|
|
180
|
-
'formatted_mb':
|
|
181
|
-
'unit_type': '
|
|
178
|
+
'formatted_mb': converted_value,
|
|
179
|
+
'unit_type': 'bytes'
|
|
182
180
|
}
|
|
183
181
|
except (ValueError, ZeroDivisionError):
|
|
184
182
|
formatted_data[timestamp_str] = {
|
|
185
183
|
'value': value,
|
|
186
|
-
'unit_type': '
|
|
184
|
+
'unit_type': 'bytes_err'
|
|
187
185
|
}
|
|
188
186
|
else:
|
|
189
187
|
formatted_data[timestamp_str] = {
|
|
@@ -322,20 +320,14 @@ def _format_app_stats_timeseries_to_csv(response_data: Dict[str, Any]) -> str:
|
|
|
322
320
|
value = data.get(timestamp, '')
|
|
323
321
|
|
|
324
322
|
# Convert bytes measures to MB and add appropriate suffix
|
|
325
|
-
if measure
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
formatted_value = f"{mb_value:.3f}".rstrip('0').rstrip('.')
|
|
332
|
-
row_data[f'{measure}_mb'] = formatted_value
|
|
333
|
-
except (ValueError, ZeroDivisionError):
|
|
334
|
-
row_data[f'{measure}_mb'] = value
|
|
335
|
-
else:
|
|
336
|
-
row_data[f'{measure}_mb'] = value
|
|
323
|
+
if is_bytes_measure(measure):
|
|
324
|
+
try:
|
|
325
|
+
converted_value = convert_bytes_to_mb(value) if value != '' else ''
|
|
326
|
+
row_data[f'{measure}_mb'] = converted_value
|
|
327
|
+
except (ValueError, ZeroDivisionError):
|
|
328
|
+
row_data[f'{measure}_mb'] = str(value) if value != '' else ''
|
|
337
329
|
else:
|
|
338
|
-
row_data[measure] = value
|
|
330
|
+
row_data[measure] = str(value) if value != '' else ''
|
|
339
331
|
|
|
340
332
|
rows.append(row_data)
|
|
341
333
|
|
catocli/Utils/formatter_utils.py
CHANGED
|
@@ -118,6 +118,7 @@ def is_bytes_measure(measure: str, units: str = "") -> bool:
|
|
|
118
118
|
"""
|
|
119
119
|
bytes_measures = {
|
|
120
120
|
'downstream', 'upstream', 'traffic', 'bytes', 'bytesDownstream',
|
|
121
|
+
'bytes_upstream', 'bytes_downstream', 'bytes_total',
|
|
121
122
|
'bytesUpstream', 'bytesTotal', 'throughput_downstream', 'throughput_upstream'
|
|
122
123
|
}
|
|
123
124
|
|
catocli/__init__.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
__version__ = "3.0.
|
|
1
|
+
__version__ = "3.0.26"
|
|
2
2
|
__cato_host__ = "https://api.catonetworks.com/api/v1/graphql2"
|
catocli/clisettings.json
CHANGED
|
@@ -58,6 +58,7 @@ catocli query appStatsTimeSeries '{
|
|
|
58
58
|
"fieldName": "application_name"
|
|
59
59
|
}
|
|
60
60
|
],
|
|
61
|
+
"perSecond": false,
|
|
61
62
|
"measure": [
|
|
62
63
|
{
|
|
63
64
|
"aggType": "sum",
|
|
@@ -99,6 +100,7 @@ catocli query appStatsTimeSeries '{
|
|
|
99
100
|
"fieldName": "user_name"
|
|
100
101
|
}
|
|
101
102
|
],
|
|
103
|
+
"perSecond": false,
|
|
102
104
|
"measure": [
|
|
103
105
|
{
|
|
104
106
|
"aggType": "sum",
|
|
@@ -7,13 +7,121 @@ def query_container_parse(query_subparsers):
|
|
|
7
7
|
help='container() query operation',
|
|
8
8
|
usage=get_help("query_container"), formatter_class=CustomSubparserHelpFormatter)
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
10
|
+
query_container_subparsers = query_container_parser.add_subparsers()
|
|
11
|
+
|
|
12
|
+
query_container_list_parser = query_container_subparsers.add_parser('list',
|
|
13
|
+
help='list() container operation',
|
|
14
|
+
usage=get_help("query_container_list"))
|
|
15
|
+
|
|
16
|
+
query_container_list_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
|
|
17
|
+
query_container_list_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.')
|
|
18
|
+
query_container_list_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
|
|
19
|
+
query_container_list_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
|
|
20
|
+
query_container_list_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
|
|
21
|
+
query_container_list_parser.add_argument('-n', '--stream-events', dest='stream_events', help='Send events over network to host:port TCP')
|
|
22
|
+
query_container_list_parser.add_argument('-z', '--sentinel', dest='sentinel', help='Send events to Sentinel customerid:sharedkey')
|
|
23
|
+
query_container_list_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
|
|
24
|
+
query_container_list_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
|
|
25
|
+
query_container_list_parser.set_defaults(func=createRequest,operation_name='query.container.list')
|
|
26
|
+
|
|
27
|
+
query_container_ipAddressRange_parser = query_container_subparsers.add_parser('ipAddressRange',
|
|
28
|
+
help='ipAddressRange() container operation',
|
|
29
|
+
usage=get_help("query_container_ipAddressRange"))
|
|
30
|
+
|
|
31
|
+
query_container_ipAddressRange_subparsers = query_container_ipAddressRange_parser.add_subparsers()
|
|
32
|
+
|
|
33
|
+
query_container_ipAddressRange_search_parser = query_container_ipAddressRange_subparsers.add_parser('search',
|
|
34
|
+
help='search() ipAddressRange operation',
|
|
35
|
+
usage=get_help("query_container_ipAddressRange_search"))
|
|
36
|
+
|
|
37
|
+
query_container_ipAddressRange_search_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
|
|
38
|
+
query_container_ipAddressRange_search_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.')
|
|
39
|
+
query_container_ipAddressRange_search_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
|
|
40
|
+
query_container_ipAddressRange_search_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
|
|
41
|
+
query_container_ipAddressRange_search_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
|
|
42
|
+
query_container_ipAddressRange_search_parser.add_argument('-n', '--stream-events', dest='stream_events', help='Send events over network to host:port TCP')
|
|
43
|
+
query_container_ipAddressRange_search_parser.add_argument('-z', '--sentinel', dest='sentinel', help='Send events to Sentinel customerid:sharedkey')
|
|
44
|
+
query_container_ipAddressRange_search_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
|
|
45
|
+
query_container_ipAddressRange_search_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
|
|
46
|
+
query_container_ipAddressRange_search_parser.set_defaults(func=createRequest,operation_name='query.container.ipAddressRange.search')
|
|
47
|
+
|
|
48
|
+
query_container_ipAddressRange_searchIpAddressRange_parser = query_container_ipAddressRange_subparsers.add_parser('searchIpAddressRange',
|
|
49
|
+
help='searchIpAddressRange() ipAddressRange operation',
|
|
50
|
+
usage=get_help("query_container_ipAddressRange_searchIpAddressRange"))
|
|
51
|
+
|
|
52
|
+
query_container_ipAddressRange_searchIpAddressRange_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
|
|
53
|
+
query_container_ipAddressRange_searchIpAddressRange_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.')
|
|
54
|
+
query_container_ipAddressRange_searchIpAddressRange_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
|
|
55
|
+
query_container_ipAddressRange_searchIpAddressRange_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
|
|
56
|
+
query_container_ipAddressRange_searchIpAddressRange_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
|
|
57
|
+
query_container_ipAddressRange_searchIpAddressRange_parser.add_argument('-n', '--stream-events', dest='stream_events', help='Send events over network to host:port TCP')
|
|
58
|
+
query_container_ipAddressRange_searchIpAddressRange_parser.add_argument('-z', '--sentinel', dest='sentinel', help='Send events to Sentinel customerid:sharedkey')
|
|
59
|
+
query_container_ipAddressRange_searchIpAddressRange_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
|
|
60
|
+
query_container_ipAddressRange_searchIpAddressRange_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
|
|
61
|
+
query_container_ipAddressRange_searchIpAddressRange_parser.set_defaults(func=createRequest,operation_name='query.container.ipAddressRange.searchIpAddressRange')
|
|
62
|
+
|
|
63
|
+
query_container_ipAddressRange_downloadFile_parser = query_container_ipAddressRange_subparsers.add_parser('downloadFile',
|
|
64
|
+
help='downloadFile() ipAddressRange operation',
|
|
65
|
+
usage=get_help("query_container_ipAddressRange_downloadFile"))
|
|
66
|
+
|
|
67
|
+
query_container_ipAddressRange_downloadFile_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
|
|
68
|
+
query_container_ipAddressRange_downloadFile_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.')
|
|
69
|
+
query_container_ipAddressRange_downloadFile_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
|
|
70
|
+
query_container_ipAddressRange_downloadFile_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
|
|
71
|
+
query_container_ipAddressRange_downloadFile_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
|
|
72
|
+
query_container_ipAddressRange_downloadFile_parser.add_argument('-n', '--stream-events', dest='stream_events', help='Send events over network to host:port TCP')
|
|
73
|
+
query_container_ipAddressRange_downloadFile_parser.add_argument('-z', '--sentinel', dest='sentinel', help='Send events to Sentinel customerid:sharedkey')
|
|
74
|
+
query_container_ipAddressRange_downloadFile_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
|
|
75
|
+
query_container_ipAddressRange_downloadFile_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
|
|
76
|
+
query_container_ipAddressRange_downloadFile_parser.set_defaults(func=createRequest,operation_name='query.container.ipAddressRange.downloadFile')
|
|
77
|
+
|
|
78
|
+
query_container_fqdn_parser = query_container_subparsers.add_parser('fqdn',
|
|
79
|
+
help='fqdn() container operation',
|
|
80
|
+
usage=get_help("query_container_fqdn"))
|
|
81
|
+
|
|
82
|
+
query_container_fqdn_subparsers = query_container_fqdn_parser.add_subparsers()
|
|
83
|
+
|
|
84
|
+
query_container_fqdn_search_parser = query_container_fqdn_subparsers.add_parser('search',
|
|
85
|
+
help='search() fqdn operation',
|
|
86
|
+
usage=get_help("query_container_fqdn_search"))
|
|
87
|
+
|
|
88
|
+
query_container_fqdn_search_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
|
|
89
|
+
query_container_fqdn_search_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.')
|
|
90
|
+
query_container_fqdn_search_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
|
|
91
|
+
query_container_fqdn_search_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
|
|
92
|
+
query_container_fqdn_search_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
|
|
93
|
+
query_container_fqdn_search_parser.add_argument('-n', '--stream-events', dest='stream_events', help='Send events over network to host:port TCP')
|
|
94
|
+
query_container_fqdn_search_parser.add_argument('-z', '--sentinel', dest='sentinel', help='Send events to Sentinel customerid:sharedkey')
|
|
95
|
+
query_container_fqdn_search_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
|
|
96
|
+
query_container_fqdn_search_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
|
|
97
|
+
query_container_fqdn_search_parser.set_defaults(func=createRequest,operation_name='query.container.fqdn.search')
|
|
98
|
+
|
|
99
|
+
query_container_fqdn_searchFqdn_parser = query_container_fqdn_subparsers.add_parser('searchFqdn',
|
|
100
|
+
help='searchFqdn() fqdn operation',
|
|
101
|
+
usage=get_help("query_container_fqdn_searchFqdn"))
|
|
102
|
+
|
|
103
|
+
query_container_fqdn_searchFqdn_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
|
|
104
|
+
query_container_fqdn_searchFqdn_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.')
|
|
105
|
+
query_container_fqdn_searchFqdn_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
|
|
106
|
+
query_container_fqdn_searchFqdn_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
|
|
107
|
+
query_container_fqdn_searchFqdn_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
|
|
108
|
+
query_container_fqdn_searchFqdn_parser.add_argument('-n', '--stream-events', dest='stream_events', help='Send events over network to host:port TCP')
|
|
109
|
+
query_container_fqdn_searchFqdn_parser.add_argument('-z', '--sentinel', dest='sentinel', help='Send events to Sentinel customerid:sharedkey')
|
|
110
|
+
query_container_fqdn_searchFqdn_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
|
|
111
|
+
query_container_fqdn_searchFqdn_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
|
|
112
|
+
query_container_fqdn_searchFqdn_parser.set_defaults(func=createRequest,operation_name='query.container.fqdn.searchFqdn')
|
|
113
|
+
|
|
114
|
+
query_container_fqdn_downloadFile_parser = query_container_fqdn_subparsers.add_parser('downloadFile',
|
|
115
|
+
help='downloadFile() fqdn operation',
|
|
116
|
+
usage=get_help("query_container_fqdn_downloadFile"))
|
|
117
|
+
|
|
118
|
+
query_container_fqdn_downloadFile_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
|
|
119
|
+
query_container_fqdn_downloadFile_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.')
|
|
120
|
+
query_container_fqdn_downloadFile_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
|
|
121
|
+
query_container_fqdn_downloadFile_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
|
|
122
|
+
query_container_fqdn_downloadFile_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
|
|
123
|
+
query_container_fqdn_downloadFile_parser.add_argument('-n', '--stream-events', dest='stream_events', help='Send events over network to host:port TCP')
|
|
124
|
+
query_container_fqdn_downloadFile_parser.add_argument('-z', '--sentinel', dest='sentinel', help='Send events to Sentinel customerid:sharedkey')
|
|
125
|
+
query_container_fqdn_downloadFile_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
|
|
126
|
+
query_container_fqdn_downloadFile_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
|
|
127
|
+
query_container_fqdn_downloadFile_parser.set_defaults(func=createRequest,operation_name='query.container.fqdn.downloadFile')
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
|
|
2
|
+
## CATO-CLI - query.container.fqdn.downloadFile:
|
|
3
|
+
[Click here](https://api.catonetworks.com/documentation/#query-query.container.fqdn.downloadFile) for documentation on this operation.
|
|
4
|
+
|
|
5
|
+
### Usage for query.container.fqdn.downloadFile:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
catocli query container fqdn downloadFile -h
|
|
9
|
+
|
|
10
|
+
catocli query container fqdn downloadFile <json>
|
|
11
|
+
|
|
12
|
+
catocli query container fqdn downloadFile "$(cat < query.container.fqdn.downloadFile.json)"
|
|
13
|
+
|
|
14
|
+
catocli query container fqdn downloadFile '{"downloadFqdnContainerFileInput":{"by":"ID","input":"string"}}'
|
|
15
|
+
|
|
16
|
+
catocli query container fqdn downloadFile '{
|
|
17
|
+
"downloadFqdnContainerFileInput": {
|
|
18
|
+
"by": "ID",
|
|
19
|
+
"input": "string"
|
|
20
|
+
}
|
|
21
|
+
}'
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
#### Operation Arguments for query.container.fqdn.downloadFile ####
|
|
25
|
+
|
|
26
|
+
`accountId` [ID] - (required) N/A
|
|
27
|
+
`downloadFqdnContainerFileInput` [DownloadFqdnContainerFileInput] - (required) N/A
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
|
|
2
|
+
## CATO-CLI - query.container.fqdn.search:
|
|
3
|
+
[Click here](https://api.catonetworks.com/documentation/#query-query.container.fqdn.search) for documentation on this operation.
|
|
4
|
+
|
|
5
|
+
### Usage for query.container.fqdn.search:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
catocli query container fqdn search -h
|
|
9
|
+
|
|
10
|
+
catocli query container fqdn search <json>
|
|
11
|
+
|
|
12
|
+
catocli query container fqdn search "$(cat < query.container.fqdn.search.json)"
|
|
13
|
+
|
|
14
|
+
catocli query container fqdn search '{"fqdnContainerSearchInput":{"containerRefInput":{"by":"ID","input":"string"}}}'
|
|
15
|
+
|
|
16
|
+
catocli query container fqdn search '{
|
|
17
|
+
"fqdnContainerSearchInput": {
|
|
18
|
+
"containerRefInput": {
|
|
19
|
+
"by": "ID",
|
|
20
|
+
"input": "string"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}'
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
#### Operation Arguments for query.container.fqdn.search ####
|
|
27
|
+
|
|
28
|
+
`accountId` [ID] - (required) N/A
|
|
29
|
+
`fqdnContainerSearchInput` [FqdnContainerSearchInput] - (required) N/A
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
|
|
2
|
+
## CATO-CLI - query.container.fqdn.searchFqdn:
|
|
3
|
+
[Click here](https://api.catonetworks.com/documentation/#query-query.container.fqdn.searchFqdn) for documentation on this operation.
|
|
4
|
+
|
|
5
|
+
### Usage for query.container.fqdn.searchFqdn:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
catocli query container fqdn searchFqdn -h
|
|
9
|
+
|
|
10
|
+
catocli query container fqdn searchFqdn <json>
|
|
11
|
+
|
|
12
|
+
catocli query container fqdn searchFqdn "$(cat < query.container.fqdn.searchFqdn.json)"
|
|
13
|
+
|
|
14
|
+
catocli query container fqdn searchFqdn '{"fqdnContainerSearchFqdnInput":{"fqdn":"example_value"}}'
|
|
15
|
+
|
|
16
|
+
catocli query container fqdn searchFqdn '{
|
|
17
|
+
"fqdnContainerSearchFqdnInput": {
|
|
18
|
+
"fqdn": "example_value"
|
|
19
|
+
}
|
|
20
|
+
}'
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
#### Operation Arguments for query.container.fqdn.searchFqdn ####
|
|
24
|
+
|
|
25
|
+
`accountId` [ID] - (required) N/A
|
|
26
|
+
`fqdnContainerSearchFqdnInput` [FqdnContainerSearchFqdnInput] - (required) N/A
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
|
|
2
|
+
## CATO-CLI - query.container.ipAddressRange.downloadFile:
|
|
3
|
+
[Click here](https://api.catonetworks.com/documentation/#query-query.container.ipAddressRange.downloadFile) for documentation on this operation.
|
|
4
|
+
|
|
5
|
+
### Usage for query.container.ipAddressRange.downloadFile:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
catocli query container ipAddressRange downloadFile -h
|
|
9
|
+
|
|
10
|
+
catocli query container ipAddressRange downloadFile <json>
|
|
11
|
+
|
|
12
|
+
catocli query container ipAddressRange downloadFile "$(cat < query.container.ipAddressRange.downloadFile.json)"
|
|
13
|
+
|
|
14
|
+
catocli query container ipAddressRange downloadFile '{"downloadIpAddressRangeContainerFileInput":{"by":"ID","input":"string"}}'
|
|
15
|
+
|
|
16
|
+
catocli query container ipAddressRange downloadFile '{
|
|
17
|
+
"downloadIpAddressRangeContainerFileInput": {
|
|
18
|
+
"by": "ID",
|
|
19
|
+
"input": "string"
|
|
20
|
+
}
|
|
21
|
+
}'
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
#### Operation Arguments for query.container.ipAddressRange.downloadFile ####
|
|
25
|
+
|
|
26
|
+
`accountId` [ID] - (required) N/A
|
|
27
|
+
`downloadIpAddressRangeContainerFileInput` [DownloadIpAddressRangeContainerFileInput] - (required) N/A
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
|
|
2
|
+
## CATO-CLI - query.container.ipAddressRange.search:
|
|
3
|
+
[Click here](https://api.catonetworks.com/documentation/#query-query.container.ipAddressRange.search) for documentation on this operation.
|
|
4
|
+
|
|
5
|
+
### Usage for query.container.ipAddressRange.search:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
catocli query container ipAddressRange search -h
|
|
9
|
+
|
|
10
|
+
catocli query container ipAddressRange search <json>
|
|
11
|
+
|
|
12
|
+
catocli query container ipAddressRange search "$(cat < query.container.ipAddressRange.search.json)"
|
|
13
|
+
|
|
14
|
+
catocli query container ipAddressRange search '{"ipAddressRangeContainerSearchInput":{"containerRefInput":{"by":"ID","input":"string"}}}'
|
|
15
|
+
|
|
16
|
+
catocli query container ipAddressRange search '{
|
|
17
|
+
"ipAddressRangeContainerSearchInput": {
|
|
18
|
+
"containerRefInput": {
|
|
19
|
+
"by": "ID",
|
|
20
|
+
"input": "string"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}'
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
#### Operation Arguments for query.container.ipAddressRange.search ####
|
|
27
|
+
|
|
28
|
+
`accountId` [ID] - (required) N/A
|
|
29
|
+
`ipAddressRangeContainerSearchInput` [IpAddressRangeContainerSearchInput] - (required) N/A
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
|
|
2
|
+
## CATO-CLI - query.container.ipAddressRange.searchIpAddressRange:
|
|
3
|
+
[Click here](https://api.catonetworks.com/documentation/#query-query.container.ipAddressRange.searchIpAddressRange) for documentation on this operation.
|
|
4
|
+
|
|
5
|
+
### Usage for query.container.ipAddressRange.searchIpAddressRange:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
catocli query container ipAddressRange searchIpAddressRange -h
|
|
9
|
+
|
|
10
|
+
catocli query container ipAddressRange searchIpAddressRange <json>
|
|
11
|
+
|
|
12
|
+
catocli query container ipAddressRange searchIpAddressRange "$(cat < query.container.ipAddressRange.searchIpAddressRange.json)"
|
|
13
|
+
|
|
14
|
+
catocli query container ipAddressRange searchIpAddressRange '{"ipAddressRangeContainerSearchIpAddressRangeInput":{"ipAddressRangeInput":{"from":"example_value","to":"example_value"}}}'
|
|
15
|
+
|
|
16
|
+
catocli query container ipAddressRange searchIpAddressRange '{
|
|
17
|
+
"ipAddressRangeContainerSearchIpAddressRangeInput": {
|
|
18
|
+
"ipAddressRangeInput": {
|
|
19
|
+
"from": "example_value",
|
|
20
|
+
"to": "example_value"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}'
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
#### Operation Arguments for query.container.ipAddressRange.searchIpAddressRange ####
|
|
27
|
+
|
|
28
|
+
`accountId` [ID] - (required) N/A
|
|
29
|
+
`ipAddressRangeContainerSearchIpAddressRangeInput` [IpAddressRangeContainerSearchIpAddressRangeInput] - (required) N/A
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
|
|
2
|
+
## CATO-CLI - query.container.list:
|
|
3
|
+
[Click here](https://api.catonetworks.com/documentation/#query-query.container.list) for documentation on this operation.
|
|
4
|
+
|
|
5
|
+
### Usage for query.container.list:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
catocli query container list -h
|
|
9
|
+
|
|
10
|
+
catocli query container list <json>
|
|
11
|
+
|
|
12
|
+
catocli query container list "$(cat < query.container.list.json)"
|
|
13
|
+
|
|
14
|
+
catocli query container list '{"containerSearchInput":{"containerRefInput":{"by":"ID","input":"string"},"types":"IP_RANGE"}}'
|
|
15
|
+
|
|
16
|
+
catocli query container list '{
|
|
17
|
+
"containerSearchInput": {
|
|
18
|
+
"containerRefInput": {
|
|
19
|
+
"by": "ID",
|
|
20
|
+
"input": "string"
|
|
21
|
+
},
|
|
22
|
+
"types": "IP_RANGE"
|
|
23
|
+
}
|
|
24
|
+
}'
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
#### Operation Arguments for query.container.list ####
|
|
28
|
+
|
|
29
|
+
`accountId` [ID] - (required) N/A
|
|
30
|
+
`containerSearchInput` [ContainerSearchInput] - (required) N/A
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: catocli
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.26
|
|
4
4
|
Summary: Cato Networks cli wrapper for the GraphQL API.
|
|
5
5
|
Home-page: https://github.com/Cato-Networks/cato-cli
|
|
6
6
|
Author: Cato Networks
|
|
@@ -102,7 +102,7 @@ For detailed information about profile management, see [PROFILES.md](PROFILES.md
|
|
|
102
102
|
|-----------|-------------|--------|
|
|
103
103
|
| [Account Metrics](./catocli_user_guide/account-metrics.md) | Network performance metrics by site, user, or interface | 📊 |
|
|
104
104
|
| [Application Statistics](./catocli_user_guide/app-stats.md) | User activity and application usage analysis | 📱 |
|
|
105
|
-
| [Application Time Series](./catocli_user_guide/app-stats-timeseries.md) | Traffic analysis over time with hourly/daily breakdowns | 📈 |
|
|
105
|
+
| [Application Statistics Time Series](./catocli_user_guide/app-stats-timeseries.md) | Traffic analysis over time with hourly/daily breakdowns | 📈 |
|
|
106
106
|
| [Events Time Series](./catocli_user_guide/events-timeseries.md) | Security events, connectivity, and threat analysis | 🔒 |
|
|
107
107
|
| [Socket Port Metrics](./catocli_user_guide/socket-port-metrics.md) | Socket interface performance and traffic analysis | 🔌 |
|
|
108
108
|
| [Socket Port Time Series](./catocli_user_guide/socket-port-timeseries.md) | Socket performance metrics over time | ⏱️ |
|
|
@@ -179,6 +179,3 @@ This CLI is a Python 3 application and has been tested with Python 3.6 -> 3.8
|
|
|
179
179
|
|
|
180
180
|
## Installing the correct version for environment:
|
|
181
181
|
https://www.python.org/downloads/
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|