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.

Files changed (31) hide show
  1. catocli/Utils/clidriver.py +10 -10
  2. catocli/Utils/formatter_app_stats.py +29 -16
  3. catocli/Utils/formatter_app_stats_timeseries.py +15 -23
  4. catocli/Utils/formatter_utils.py +1 -0
  5. catocli/__init__.py +1 -1
  6. catocli/clisettings.json +2 -1
  7. catocli/parsers/query_appStatsTimeSeries/README.md +2 -0
  8. catocli/parsers/query_container/__init__.py +118 -10
  9. catocli/parsers/query_container_fqdn_downloadFile/README.md +27 -0
  10. catocli/parsers/query_container_fqdn_search/README.md +29 -0
  11. catocli/parsers/query_container_fqdn_searchFqdn/README.md +26 -0
  12. catocli/parsers/query_container_ipAddressRange_downloadFile/README.md +27 -0
  13. catocli/parsers/query_container_ipAddressRange_search/README.md +29 -0
  14. catocli/parsers/query_container_ipAddressRange_searchIpAddressRange/README.md +29 -0
  15. catocli/parsers/query_container_list/README.md +30 -0
  16. {catocli-3.0.24.dist-info → catocli-3.0.26.dist-info}/METADATA +2 -5
  17. {catocli-3.0.24.dist-info → catocli-3.0.26.dist-info}/RECORD +30 -17
  18. models/query.appStats.json +216 -0
  19. models/query.appStatsTimeSeries.json +144 -0
  20. models/query.container.fqdn.downloadFile.json +519 -0
  21. models/query.container.fqdn.search.json +790 -0
  22. models/query.container.fqdn.searchFqdn.json +567 -0
  23. models/query.container.ipAddressRange.downloadFile.json +519 -0
  24. models/query.container.ipAddressRange.search.json +790 -0
  25. models/query.container.ipAddressRange.searchIpAddressRange.json +720 -0
  26. models/query.container.list.json +1316 -0
  27. catocli/parsers/query_container/README.md +0 -65
  28. {catocli-3.0.24.dist-info → catocli-3.0.26.dist-info}/WHEEL +0 -0
  29. {catocli-3.0.24.dist-info → catocli-3.0.26.dist-info}/entry_points.txt +0 -0
  30. {catocli-3.0.24.dist-info → catocli-3.0.26.dist-info}/licenses/LICENSE +0 -0
  31. {catocli-3.0.24.dist-info → catocli-3.0.26.dist-info}/top_level.txt +0 -0
@@ -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
- # Add unit type information for bytes fields
93
- if (i < len(record_unit_types) and record_unit_types[i] == 'bytes'):
94
- formatted_mb = convert_bytes_to_mb(value)
95
- if formatted_mb and formatted_mb != str(value):
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
- else:
104
+ except (ValueError, ZeroDivisionError):
102
105
  record_data[field] = {
103
106
  "value": value,
104
- "unit_type": "bytes"
107
+ "unit_type": "bytes_err"
105
108
  }
106
109
  else:
107
110
  record_data[field] = {
108
111
  "value": value,
109
- "unit_type": record_unit_types[i] if i < len(record_unit_types) else "unknown"
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) and field_unit_types[i] == 'bytes':
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
- # Convert bytes to MB if the field type is bytes
176
- if (i < len(record_unit_types) and record_unit_types[i] == 'bytes'):
177
- formatted_value = convert_bytes_to_mb(value)
178
- row.append(formatted_value if formatted_value else value)
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 in ['downstream', 'upstream', 'traffic'] and value:
173
+ if is_bytes_measure(measure):
174
174
  try:
175
- mb_value = value
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': formatted_value,
181
- 'unit_type': 'mb'
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': 'mb'
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 in ['downstream', 'upstream', 'traffic']:
326
- if value:
327
- try:
328
- # Current bug in appStatsTimeSeries returning mb indicating unit as bytes
329
- # mb_value = float(value) / 1048576
330
- mb_value = value
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
 
@@ -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.24"
1
+ __version__ = "3.0.26"
2
2
  __cato_host__ = "https://api.catonetworks.com/api/v1/graphql2"
catocli/clisettings.json CHANGED
@@ -16,7 +16,8 @@
16
16
  "policy": true,
17
17
  "groups": true,
18
18
  "newGroups": true,
19
- "site": true
19
+ "site": true,
20
+ "container": true
20
21
  },
21
22
  "childOperationObjects": {
22
23
  "ipAddressRange": true,
@@ -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
- query_container_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
11
- query_container_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.')
12
- query_container_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
13
- query_container_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
14
- query_container_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
15
- query_container_parser.add_argument('-n', '--stream-events', dest='stream_events', help='Send events over network to host:port TCP')
16
- query_container_parser.add_argument('-z', '--sentinel', dest='sentinel', help='Send events to Sentinel customerid:sharedkey')
17
- query_container_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
18
- query_container_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
- query_container_parser.set_defaults(func=createRequest,operation_name='query.container')
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.24
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
-