New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

centralcli

Package Overview
Dependencies
Maintainers
1
Versions
322
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

centralcli - pypi Package Compare versions

Comparing version
9.3.0
to
9.3.1
+1
-1
centralcli/caas.py

@@ -184,3 +184,2 @@ import csv

# FIXME

@@ -198,2 +197,3 @@ async def get_config_status(self, serial: str) -> Response: # pragma: no cover

class CaasAPI(BuildCLI):

@@ -200,0 +200,0 @@ def __init__(self, data: dict = None, *, file: Path = None) -> None:

@@ -12,2 +12,3 @@ from __future__ import annotations

class AiOpsAPI:

@@ -44,3 +45,3 @@ def __init__(self, session: Session):

"""
from_time = from_time or datetime.fromtimestamp(datetime.now(tz=timezone.utc).timestamp() - 10800) # Now - 3 hours (UTC)
from_time = from_time or datetime.fromtimestamp(datetime.now(tz=timezone.utc).timestamp() - 10800) # Now - 3 hours (UTC)
from_time, to_time = utils.parse_time_options(from_time, to_time, in_milliseconds=True)

@@ -83,3 +84,3 @@ if serial:

"""
from_time = from_time or datetime.fromtimestamp(datetime.now(tz=timezone.utc).timestamp() - 10800) # Now - 3 hours (UTC)
from_time = from_time or datetime.fromtimestamp(datetime.now(tz=timezone.utc).timestamp() - 10800) # Now - 3 hours (UTC)
from_time, to_time = utils.parse_time_options(from_time, to_time, in_milliseconds=True)

@@ -86,0 +87,0 @@ url = f"/aiops/v2/insights/global/id/{insight_id}/export"

@@ -63,3 +63,2 @@ from __future__ import annotations

async def get_site_details(

@@ -269,3 +268,2 @@ self,

site_address = {"address": address, "city": city, "state": state, "country": country, "zipcode": zipcode}

@@ -272,0 +270,0 @@ geolocation = {"latitude": latitude, "longitude": longitude}

@@ -18,2 +18,3 @@ from __future__ import annotations

@overload

@@ -327,3 +328,2 @@ def parse_time_window(time_window: CloudAuthTimeWindow | TimeRange) -> str: ... # pragma: no cover

async def get_authentications(

@@ -369,3 +369,2 @@ self,

async def get_sessions(

@@ -372,0 +371,0 @@ self,

@@ -14,2 +14,3 @@ from __future__ import annotations

class DeviceManagementAPI:

@@ -16,0 +17,0 @@ def __init__(self, session: Session):

@@ -12,2 +12,3 @@ from __future__ import annotations

class FirmwareAPI:

@@ -17,3 +18,2 @@ def __init__(self, session: Session):

async def get_firmware_version_list(

@@ -231,3 +231,2 @@ self,

json_data = {

@@ -319,3 +318,2 @@ 'device_type': device_type,

async def get_swarm_firmware_details(

@@ -322,0 +320,0 @@ self,

@@ -11,2 +11,3 @@ from __future__ import annotations

class GuestAPI:

@@ -110,3 +111,2 @@ def __init__(self, session: Session):

async def add_guest(

@@ -113,0 +113,0 @@ self,

@@ -10,2 +10,3 @@ # pragma: exclude file Excluding for now as these functions are not used

class KmsAPI:

@@ -12,0 +13,0 @@ def __init__(self, session: Session):

@@ -153,3 +153,3 @@ from __future__ import annotations

client_type = "wireless"
if [v for v in wired_only_params.values() if v is not None]:
if [v for v in wired_only_params.values() if v is not None]:
if client_type and client_type != "wired":

@@ -265,3 +265,2 @@ raise ValueError(f"Invalid combination of filters. WIRED only filter provided which conflicts with client type {client_type}")

async def get_wireless_clients(

@@ -558,3 +557,3 @@ self,

'cluster_id': cluster_id,
'calculate_total': "True", # For pagination
'calculate_total': "True", # For pagination
'sort': sort,

@@ -617,3 +616,3 @@ "offset": offset,

dev_types = ["aps", "switches", "gateways"] if dev_types is None else [constants.lib_to_api(dev_type, "monitoring") for dev_type in dev_types]
dev_types = ["aps", "switches", "gateways"] if dev_types is None else [constants.lib_to_api(dev_type, "monitoring") for dev_type in dev_types]

@@ -994,3 +993,3 @@ # We always get resource details for switches when cache=True as we need it for the switch_role (standalone/conductor/secondary/member) to store in the cache.

'hostname': hostname,
'device_type': None if not device_type else constants.lib_to_api(device_type, "event"),
'device_type': None if not device_type else constants.lib_to_api(device_type, "event"),
'sort': sort,

@@ -1172,3 +1171,2 @@ 'site': site,

async def get_gw_uplinks_details(

@@ -1223,3 +1221,2 @@ self,

params = {

@@ -1226,0 +1223,0 @@ 'uplink_id': uplink_id,

@@ -82,4 +82,2 @@ from __future__ import annotations

async def get_branch_health(

@@ -119,4 +117,2 @@ self,

async def validate_wss_key(

@@ -123,0 +119,0 @@ self,

@@ -15,2 +15,3 @@ from __future__ import annotations

class PlatformAPI:

@@ -17,0 +18,0 @@ def __init__(self, session: Session):

@@ -14,2 +14,3 @@ from __future__ import annotations

class RapidsAPI:

@@ -16,0 +17,0 @@ def __init__(self, session: Session):

@@ -11,2 +11,3 @@ from __future__ import annotations

class TroubleShootingAPI:

@@ -36,3 +37,2 @@ def __init__(self, session: Session):

async def start_ts_session(

@@ -39,0 +39,0 @@ self,

@@ -219,4 +219,2 @@ #!/usr/bin/env python3

@app.command()

@@ -396,2 +394,4 @@ def reboot(

""" # pragma: no cover
@app.command(help=start_help, short_help="Start WebHook Proxy", hidden=not hook_enabled)

@@ -413,2 +413,3 @@ def start(

yes = True if yes else False
def terminate_process(pid):

@@ -473,2 +474,3 @@ p = psutil.Process(pid)

svc = "wh_proxy" if what == "hook-proxy" else "wh2snow"
def terminate_process(pid):

@@ -520,2 +522,3 @@ with render.Spinner("Terminating Webhook Proxy..."):

@app.command()

@@ -547,3 +550,2 @@ def archive(

render.econsole.print(_msg, _emsg, sep="\n", emoji=False)

@@ -559,3 +561,2 @@ render.confirm(yes)

@app.command()

@@ -647,2 +648,3 @@ def unarchive(

@app.command(hidden=True)

@@ -750,3 +752,2 @@ def renew_license(

log.debugv(f'[cyan]cencli[/] called with Arguments: {" ".join(sys.argv[1:])}')

@@ -753,0 +754,0 @@

@@ -104,3 +104,3 @@ from __future__ import annotations

self.config = config or cfg if workspace_name is None else Config(workspace=workspace_name)
self.workspace_name = workspace_name or self.config.workspace # only used for refresh of tokens in multiple workspaces
self.workspace_name = workspace_name or self.config.workspace # only used for refresh of tokens in multiple workspaces
self._aio_session = aio_session

@@ -131,3 +131,3 @@ self.ssl = self.config.ssl_verify

else:
cls.glp_requests += utils.listify(requests)
cls.glp_requests += utils.listify(requests)

@@ -271,3 +271,3 @@ def get_glp_conn_from_file(self) -> NewCentralBase:

_url = URL(url).with_query(params)
_data_msg = ' ' if not url else f' {escape(f"[{_url.path}]")}' # Need to cancel [ or rich will eval it as a closing markup
_data_msg = ' ' if not url else f' {escape(f"[{_url.path}]")}' # Need to cancel [ or rich will eval it as a closing markup
end_name = _url.name if _url.name not in ["aps", "gateways", "switches"] else lib_to_api(_url.name)

@@ -366,6 +366,6 @@ if self.config.dev.sanitize and utils.is_serial(end_name): # pragma: no cover

if resp.status == 401:
spin_txt_retry = "(retry after token refresh)"
spin_txt_retry = "(retry after token refresh)"
self.refresh_token()
elif "errorCode" in resp.raw and "HPE_GL_ERROR" in resp.raw["errorCode"] and "signature has expired" in resp.raw.get("message", "").lower():
spin_txt_retry = "(retry after token refresh)"
spin_txt_retry = "(retry after token refresh)"
if hasattr(self.auth, "handle_expired_token"):

@@ -521,3 +521,2 @@ self.auth.handle_expired_token()

# On 1st call determine if remaining calls can be made in batch

@@ -558,3 +557,2 @@ # total is provided for some calls with the total # of records available

batch_res: List[Response] = await self._batch_request(_reqs)

@@ -609,3 +607,3 @@ failures: List[Response] = [r for r in batch_res if not r.ok] # A failure means both the original attempt and the retry failed.

if not url.path.startswith("/topology_external_api/vlans"): # API-FLAW vlan endpoint total never matches the # of VLANs. This is a bug
if not count and not failures and isinstance(r.raw, dict) and "total" in r.raw and isinstance(r.output, list) and len(r.output) < r.raw["total"]: # pragma: no cover
if not count and not failures and isinstance(r.raw, dict) and "total" in r.raw and isinstance(r.output, list) and len(r.output) < r.raw["total"]: # pragma: no cover
log.warning(f"[{r.method}]{r.url.path} Total records {len(r.output)} != the total field ({r.raw['total']}) in raw response", show=True, caption=True, log=True)

@@ -775,3 +773,3 @@ except Exception:

if (not self.is_cnx and self.requests) or (self.is_cnx and self.glp_requests): # a call has been made no need to verify first call (token refresh)
if (not self.is_cnx and self.requests) or (self.is_cnx and self.glp_requests): # a call has been made no need to verify first call (token refresh)
chunked_calls = utils.chunker(api_calls, max_calls_per_chunk)

@@ -778,0 +776,0 @@ else:

@@ -26,2 +26,3 @@ # -*- coding: utf-8 -*-

class CLIArgs:

@@ -189,4 +190,4 @@ def __init__(self, cache: Cache):

self.site_many: OptionInfo = typer.Option(None, help="Filter by Site(s)", metavar=iden_meta.site_many, autocompletion=cache.site_completion, show_default=False,)
self.label: OptionInfo = typer.Option(None, help="Filter by Label", metavar=iden_meta.label, autocompletion=cache.label_completion,show_default=False,)
self.label_many: OptionInfo = typer.Option(None, help="Filter by Label(s)", metavar=iden_meta.label_many, autocompletion=cache.label_completion,show_default=False,)
self.label: OptionInfo = typer.Option(None, help="Filter by Label", metavar=iden_meta.label, autocompletion=cache.label_completion, show_default=False,)
self.label_many: OptionInfo = typer.Option(None, help="Filter by Label(s)", metavar=iden_meta.label_many, autocompletion=cache.label_completion, show_default=False,)
self.debug: OptionInfo = typer.Option(False, "--debug", envvar=env_var.debug, help="Enable Additional Debug Logging", rich_help_panel="Common Options",)

@@ -230,3 +231,3 @@ self.debugv: OptionInfo = typer.Option(False, "--debugv", help="Enable Verbose Debug Logging", rich_help_panel="Common Options",)

self.device: OptionInfo = typer.Option(None, "--dev", metavar=iden_meta.dev, help="Filter by device", autocompletion=cache.dev_completion, show_default=False,)
self.device_type: OptionInfo = typer.Option(None, "--dev-type",help="Filter by Device Type",show_default=False,)
self.device_type: OptionInfo = typer.Option(None, "--dev-type", help="Filter by Device Type", show_default=False,)
self.swarm_device: OptionInfo = typer.Option(None, "-S", "--swarm", metavar=iden_meta.dev, help="Filter by the swarm associated with specified AOS8 IAP", autocompletion=cache.dev_ap_completion, show_default=False,)

@@ -287,3 +288,2 @@ self.swarm: OptionInfo = typer.Option(False, "-S", "--swarm", help="Filter by the swarm associated with the ap specified. [dim italic](device/AP Argument must be provided)[/]", autocompletion=cache.dev_ap_completion, show_default=False,)

@property

@@ -350,3 +350,3 @@ def start(self) -> OptionInfo:

show_default: bool | str = UNSET,
prompt: bool |str = UNSET,
prompt: bool | str = UNSET,
confirmation_prompt: bool = UNSET,

@@ -457,3 +457,2 @@ prompt_required: bool = UNSET,

def __call__(self, timerange: str, include_mins: bool = None):

@@ -460,0 +459,0 @@ self.timerange = timerange

@@ -48,2 +48,3 @@ #!/usr/bin/env python3

err_console = Console(stderr=True)

@@ -162,2 +163,3 @@

@app.command()

@@ -248,3 +250,2 @@ def group(

econsole.print(f"{_msg}")

@@ -270,3 +271,3 @@

# prep data for cache
data={
data = {
'name': group,

@@ -335,6 +336,5 @@ "allowed_types": allowed_types,

@app.command()
def site(
site_name: str = typer.Argument(... , show_default=False,),
site_name: str = typer.Argument(..., show_default=False,),
address: str = typer.Argument(None, help="street address, (enclose in quotes)", show_default=False,),

@@ -397,3 +397,2 @@ city: str = typer.Argument(None, show_default=False,),

# TODO label can't match any existing label names OR site names. Add pre-check via cache / cache-update if label already exists with that name ... then error if cache_update confirms it's accurate

@@ -504,3 +503,3 @@ @app.command()

econsole.print(f" {k}: [cyan]{v}[/]") for k, v in kwargs.items()
if k not in ["passphrase", "cert_data"]
if k not in ["passphrase", "cert_data"]
]

@@ -586,2 +585,3 @@ render.confirm(yes)

def _get_variable_file(var_file: Path) -> dict[str, dict[str, str]]:

@@ -636,3 +636,3 @@ var_data = config.get_file_data(var_file)

name: str = typer.Argument(..., show_default=False,),
password: str = typer.Option(None, help="Should generally be provided, wrap in single quotes", show_default=False,), # hide_input=True, prompt=True, confirmation_prompt=True),
password: str = typer.Option(None, help="Should generally be provided, wrap in single quotes", show_default=False,), # hide_input=True, prompt=True, confirmation_prompt=True),
company: str = typer.Option(None, help="Company Name", show_default=False,),

@@ -701,3 +701,3 @@ phone: str = typer.Option(None, help="Phone # of guest; Format: +[CountryCode][PhoneNumber]", show_default=False,),

role: str = typer.Option(..., help="The user role to associate with devices using this PSK", show_default=False,),
psk: str = typer.Option(None, help=":warning: This currently has no impact, PSK is always randomly generated.", show_default=False, hidden=True,),
psk: str = typer.Option(None, help=":warning: This currently has no impact, PSK is always randomly generated.", show_default=False, hidden=True,),
# The PSK/Passphrase, [dim italic]Best to wrap in single quotes.[/] {cli.help_block('Generate Random PSK')}", show_default=False,),

@@ -704,0 +704,0 @@ disable: bool = typer.Option(False, "-D", "--disable", is_flag=True, help="Add MPSK Configuration, but set to [red]disabled[/]", show_default=False,),

@@ -112,3 +112,2 @@ #!/usr/bin/env python3

@app.command(name="label")

@@ -115,0 +114,0 @@ def label_(

@@ -276,2 +276,3 @@ from __future__ import annotations

@app.callback()

@@ -278,0 +279,0 @@ def callback():

@@ -112,2 +112,3 @@ #!/usr/bin/env python3

# TODO use get_topo_for_site similar to show aps -n single call can get neigbor detail for all aps

@@ -134,3 +135,2 @@ def _get_lldp_dict(ap_dict: dict[str, dict[str, Any]]) -> dict: # pragma: no cover requires tty

# Any APs that lack a site or lack upstream device info from topo API ... need to fetch neighbor per AP

@@ -159,2 +159,3 @@ lldp_reqs = [br(api.topo.get_ap_lldp_neighbor, serial) for serial in ap_dict if serial not in out]

def get_lldp_names(fstr: str, default_only: bool = False, lower: bool = False, space: str = None, **kwargs) -> list[dict[str, str]]: # pragma: no cover requires tty

@@ -216,3 +217,2 @@ need_lldp = False if "%h" not in fstr and "%p" not in fstr else True

print(_warn)

@@ -339,3 +339,2 @@ if resp.rl.remain_day < num_calls:

# TODO finish extraction of uplink commands from commands sent to gw

@@ -345,3 +344,3 @@ # so they can be sent in 2nd request as gw always errors interface doesn't

def _extract_uplink_commands(commands: list[str]) -> tuple[list[str], list[str]]: # pragma: no cover
_start=None
_start = None
uplk_cmds = []

@@ -379,3 +378,2 @@ for idx, c in enumerate(commands):

@app.command()

@@ -459,3 +457,3 @@ def verify(

_pfx = "" if _pfx in str(validation[s]) else _pfx
if file_by_serial[s].get("subscription", "null") != (central_by_serial[s]["subscription"] or "null"): # .replace("-", "_").replace(" ", "_")
if file_by_serial[s].get("subscription", "null") != (central_by_serial[s]["subscription"] or "null"): # .replace("-", "_").replace(" ", "_")
validation[s] += [f"[cyan]Subscription[/]: {_pfx}[bright_red]{file_by_serial[s].get('subscription', 'null')}[/] from import != [bright_green]{central_by_serial[s]['subscription'] or 'No Subscription Assigned'}[/] reflected in Central."]

@@ -518,2 +516,3 @@ elif validation[s]: # Only show positive valid results here if the device failed other items.

@app.command(short_help="Batch Deploy groups, sites, devices... from file", hidden=True)

@@ -669,3 +668,3 @@ def deploy(

@app.command() #TOGLP Need GLP version
@app.command() # TOGLP Need GLP version
def unsubscribe(

@@ -818,3 +817,2 @@ import_file: Path = common.arguments.import_file,

render.display_results(resp, tablefmt="action")

@@ -824,3 +822,3 @@ # update dev cache

cache_data = [common.cache.get_dev_identifier(r.output) for r in resp if r.ok and r.status != 299] # responds with str serial number
cache_data = [{**dev, "name": data[dev["serial"]]["hostname"]} for dev in cache_data] # 299 is default, indicates no call was performed, this is returned when the current data matches what's already set for the dev
cache_data = [{**dev, "name": data[dev["serial"]]["hostname"]} for dev in cache_data] # 299 is default, indicates no call was performed, this is returned when the current data matches what's already set for the dev
api.session.request(common.cache.update_dev_db, data=cache_data)

@@ -868,3 +866,3 @@

import_file = [f for f in import_file if not str(f).startswith("device")] # allow unnecessary 'devices' sub-command
import_file = [f for f in import_file if not str(f).startswith("device")] # allow unnecessary 'devices' sub-command

@@ -871,0 +869,0 @@ if not import_file:

@@ -206,2 +206,3 @@ from __future__ import annotations

@app.callback()

@@ -208,0 +209,0 @@ def callback():

@@ -43,3 +43,2 @@ #!/usr/bin/env python3

data = common._get_import_file(import_file, "devices")

@@ -158,2 +157,3 @@

@app.command()

@@ -160,0 +160,0 @@ def variables(

@@ -73,3 +73,2 @@ #!/usr/bin/env python3

# FIXME

@@ -145,4 +144,2 @@ @app.command(hidden=True)

@app.command("batch")

@@ -359,2 +356,3 @@ def caas_batch(

@app.callback()

@@ -361,0 +359,0 @@ def callback():

@@ -15,2 +15,3 @@ #!/usr/bin/env python3

@app.command()

@@ -17,0 +18,0 @@ def upgrade(

@@ -48,3 +48,2 @@ #!/usr/bin/env python3

@app.callback()

@@ -51,0 +50,0 @@ def callback():

@@ -45,3 +45,3 @@ #!/usr/bin/env python3

raise typer.Exit(1)
elif len(var_file) > 1:
elif len(var_file) > 1:
common.exit(f"Too many matches, found [cyan]{len(var_file)}[/] files with base-name [cyan]{template.stem}[/].")

@@ -93,2 +93,4 @@ else:

callback_str = f"Convert j2 Templates{'' if not config.is_old_cfg else ' or convert the cencli config to CFG_VERSION: 2'}"
@app.callback(help=callback_str)

@@ -95,0 +97,0 @@ def callback():

@@ -26,2 +26,3 @@ #!/usr/bin/env python3

@app.command()

@@ -117,3 +118,2 @@ def cert(

@app.command()

@@ -296,3 +296,2 @@ def group(

@app.callback()

@@ -299,0 +298,0 @@ def callback():

@@ -13,2 +13,3 @@ #!/usr/bin/env python3

@app.command()

@@ -15,0 +16,0 @@ def compliance(

@@ -285,3 +285,2 @@ #!/usr/bin/env python3

console.print(columns)

@@ -399,2 +398,3 @@

class CacheArgs(str, Enum):

@@ -407,2 +407,3 @@ devices = "devices"

@app.command()

@@ -506,3 +507,2 @@ def cache_del(

for idx, (ws, serial) in enumerate(zip([config.workspace, "kfc", "ge"], ["CNR4LHJ08G", "CNC7J0T11X", "CNGFJ0TJX5"])):

@@ -526,3 +526,2 @@ if idx > 0:

print(render.render_title(f"Workspace [bright_green]{config.workspace} GLP Cache Inventory refresh test call using serial# {serial}[/]"))

@@ -542,3 +541,2 @@ resp = api_clients.glp.session.request(common.cache.refresh_inv_db, serial_numbers=(serial,))

@app.callback(no_args_is_help=True)

@@ -545,0 +543,0 @@ def callback():

@@ -121,2 +121,3 @@ #!/usr/bin/env python3

def _process_ap_env_requests(aps: list[CacheDevice], reqs: list[BatchRequest], *, outdir: Path, show: bool = False, pager: bool = False) -> BatchResponse:

@@ -162,2 +163,3 @@ ap_env_res = BatchResponse(api.session.batch_request(reqs))

@dataclass

@@ -181,2 +183,3 @@ class DeviceConfigRequests: # pragma: no cover

func = api.configuration.get_ap_config
def args_getter(device: CacheDevice) -> tuple:

@@ -187,2 +190,3 @@ return (device.swack_id,)

func = caasapi.show_config
def args_getter(device: CacheDevice) -> tuple:

@@ -211,3 +215,3 @@ return (device.group, device.mac)

do_switch: bool = typer.Option(None, "--switch", help="Export both CX and AOS-SW templates. [dim italic](export not available for switch UI group config)[/]"),
groups_only: bool = typer.Option(None,"-G", "--groups-only", help="Export Group level configs only, not device level configs."),
groups_only: bool = typer.Option(None, "-G", "--groups-only", help="Export Group level configs only, not device level configs."),
ap_env: bool = typer.Option(False, "-e", "--env", help="Export AP environment settings. All ap-env settings are exported to a single file. [italic dim]Valid for APs only, [red]ignored[/] if -G|--groups-only specified[/]", show_default=False,),

@@ -332,2 +336,3 @@ show: bool = typer.Option(False, "-s", "--show", help=f"Display configs to terminal along with exporting to filesystem. {common.help_block('Display only export progress')}"),

class EvalLocationResponse:

@@ -346,2 +351,3 @@ _responses: list[Response] = []

eval_location_response = EvalLocationResponse()

@@ -404,3 +410,2 @@

def generate_redsky_csv(ap_data: list[dict[str, str]], *, mask: bool = True, pnc: bool = False) -> list[dict[str, str]]:

@@ -529,8 +534,5 @@ redsky_out = []

common.exit(code = 0 if bssid_resp.ok else 1) # any visualrf response failures will lead to exit (eval_location_response)
common.exit(code=0 if bssid_resp.ok else 1) # any visualrf response failures will lead to exit (eval_location_response)
@app.callback()

@@ -537,0 +539,0 @@ def callback():

@@ -21,3 +21,3 @@ #!/usr/bin/env python3

macs = [Mac(ap["mac"] , bssids=True, num_bssids=6) for ap in file_data]
macs = [Mac(ap["mac"], bssids=True, num_bssids=6) for ap in file_data]
invalid_macs = [(idx, m) for idx, m in enumerate(macs, start=2) if not m.ok]

@@ -89,2 +89,3 @@ if invalid_macs:

@app.command()

@@ -91,0 +92,0 @@ def bssids(

@@ -13,2 +13,3 @@ #!/usr/bin/env python3

@app.command()

@@ -78,3 +79,3 @@ def all(

_clients = [CacheClient(c.model_dump()) for c in Clients(client_resp.output)]
online_client = [c for c in _clients if c.last_connected]
online_client = [c for c in _clients if c.last_connected]
if online_client:

@@ -95,2 +96,3 @@ client = online_client[-1]

@app.callback()

@@ -97,0 +99,0 @@ def callback():

@@ -35,3 +35,3 @@ #!/usr/bin/env python3

if to_group:
out_data = [{**dev, "group": to_group } for dev in out_data]
out_data = [{**dev, "group": to_group} for dev in out_data]

@@ -144,3 +144,3 @@ timestamp = pendulum.now().format("MMDDYY-HHmmss")

cache_group = None if not group else common.cache.get_group_identifier(group)
_not_group = None if not not_group else common.cache.get_group_identifier(not_group)
_not_group = None if not not_group else common.cache.get_group_identifier(not_group)
warnings = [""]

@@ -178,3 +178,3 @@

devs = utils.format_table(common._get_import_file(migrate_file, "devices"), key_order = ["name", "serial", "mac", "status", "type", "model", "group", "site", "services"])
devs = utils.format_table(common._get_import_file(migrate_file, "devices"), key_order=["name", "serial", "mac", "status", "type", "model", "group", "site", "services"])
render.console.print(f"Migrat{'ing' if yes else 'e'} the following {len(devs)} device{'s' if len(devs) > 1 else ''} from [cyan]{config.workspace}[/] workspace to [bright_green]{to_workspace}[/] workspace")

@@ -245,3 +245,2 @@ render.console.print(f" {utils.summarize_data(devs).lstrip()}", emoji=False)

@app.callback()

@@ -248,0 +247,0 @@ def callback():

@@ -71,2 +71,3 @@ #!/usr/bin/env python3

@app.command()

@@ -115,3 +116,4 @@ def cache(

if __name__ == "__main__":
app()

@@ -140,3 +140,3 @@ #!/usr/bin/env python3

cache_update_func=common.cache.update_log_db, # cache is not updated if -vv if not verbose else None,
verbosity = verbose
verbosity=verbose
)

@@ -260,2 +260,3 @@

@app.callback()

@@ -262,0 +263,0 @@ def callback():

@@ -97,3 +97,2 @@ #!/usr/bin/env python3

params = ["serial", "group", "site", "label", "swarm_id", "band", "network"]

@@ -164,3 +163,2 @@ args = [

title = f"Bandwidth Usage [cyan]{dev.name}[/]"

@@ -268,3 +266,2 @@ if uplink:

resp = api.session.request(api.monitoring.get_clients_bandwidth_usage, **kwargs, from_time=start, to_time=end)

@@ -271,0 +268,0 @@

@@ -169,2 +169,3 @@ #!/usr/bin/env python3

@app.callback()

@@ -171,0 +172,0 @@ def callback():

@@ -31,2 +31,4 @@ #!/usr/bin/env python3

"""
@app.command(help=device_help)

@@ -89,2 +91,3 @@ def device(

swarms_help = f"""Show firmware details for swarms

@@ -94,2 +97,4 @@

"""
@app.command()

@@ -146,3 +151,2 @@ def swarm(

tablefmt = common.get_format(do_json=do_json, do_yaml=do_yaml, do_csv=do_csv, do_table=do_table)

@@ -214,2 +218,3 @@

@app.command("list")

@@ -268,3 +273,2 @@ def _list(

resp = api.session.request(api.firmware.get_firmware_version_list, **kwargs)

@@ -271,0 +275,0 @@ caption = None if not resp.ok or verbose or len(resp.output) + 7 <= render.console.height else "\u2139 Showing a single screens worth of the most recent versions, to see full list use [cyan]-v[/] (verbose)"

@@ -77,3 +77,3 @@ #!/usr/bin/env python3

title="PSKs"
title = "PSKs"
if ssid:

@@ -100,3 +100,2 @@ ssid: CacheMpsk = common.cache.get_mpsk_network_identifier(ssid)

tablefmt = "csv" if csv_import and ssid else common.get_format(do_json=do_json, do_yaml=do_yaml, do_csv=do_csv, do_table=do_table, default="rich")

@@ -103,0 +102,0 @@ caption = None if not resp.ok else f"{'' if tablefmt == 'rich' else ' '}Total Named MPSKs for [cyan]{'ALL SSIDs' if not ssid else ssid.name}[/]: [bright_green]{_mpsk_cnt or len(resp)}[/]{_caption or ''}"

@@ -157,3 +157,3 @@ #!/usr/bin/env python3

resp.output = resp.output["connection"]
caption=_build_caption(resp)
caption = _build_caption(resp)
elif "summary" in resp.output: # For Mobility GWs this endpoint only shows Overlay for SD-Branch

@@ -168,3 +168,2 @@ resp.output = resp.output["summary"]

render.display_results(

@@ -181,2 +180,3 @@ resp,

@app.callback()

@@ -183,0 +183,0 @@ def callback():

@@ -15,3 +15,2 @@ #!/usr/bin/env python3

# TODO --clean... wouldn't that accomplish the same as --raw. Verify with --raw output is not processed for formatting

@@ -18,0 +17,0 @@ @app.command()

@@ -35,3 +35,2 @@ #!/usr/bin/env python3

def all_caption(self) -> str:

@@ -48,2 +47,3 @@ caption = ""

def get_wids_response(

@@ -50,0 +50,0 @@ wids_cat: Literal["rogue", "interfering", "suspect", "all"],

@@ -203,3 +203,3 @@ #!/usr/bin/env python3

debugv: bool = common.options.debugv,
update_cache = common.options.update_cache,
update_cache=common.options.update_cache,
) -> None: # pragma: no cover

@@ -215,3 +215,3 @@ """This is a hidden test command used for automated testing.

tablefmt = common.get_format(do_json=do_json, do_yaml=do_yaml, do_csv=do_csv, do_table=do_table)
resp = api.session.request(api.monitoring.get_aps) # deployment=APDeployment.STANDALONE, status=DeviceStatusFilter.ONLINE, limit=3)
resp = api.session.request(api.monitoring.get_aps) # deployment=APDeployment.STANDALONE, status=DeviceStatusFilter.ONLINE, limit=3)
render.display_results(resp, tablefmt=tablefmt, outfile=outfile, pager=pager, sort_by=sort_by, reverse=reverse, output_by_key="deviceName")

@@ -218,0 +218,0 @@ ...

@@ -61,3 +61,2 @@ #!/usr/bin/env python3

if not complete: # pragma: no cover requires tty

@@ -72,2 +71,3 @@ render.econsole.print(f'[dark_orange3]:warning:[/] Central is still waiting on response from [cyan]{device.name}[/]')

def ts_send_command(device: CacheDevice, cmd: list[str], outfile: Path, pager: bool,) -> None:

@@ -114,2 +114,3 @@ """Helper command to send troubleshooting output (user provides command) and print results

@app.command()

@@ -161,2 +162,3 @@ def overlay(

@app.command()

@@ -163,0 +165,0 @@ def clients(

@@ -22,2 +22,3 @@ #!/usr/bin/env python3

@app.command("subscription" if not config.glp.ok else "_subscription", hidden=config.glp.ok, help=sub_help)

@@ -46,3 +47,2 @@ def classic_subscription(

@app.command("subscription" if config.glp.ok else "_subscription", hidden=not config.glp.ok, help=sub_help)

@@ -49,0 +49,0 @@ def glp_subscription(

@@ -253,3 +253,3 @@ #!/usr/bin/env python3

render.display_results(resp, tablefmt="action")
#CACHE Needs cache update
# CACHE Needs cache update

@@ -266,2 +266,4 @@

"""
@app.command("config", help=config_help)

@@ -272,3 +274,3 @@ def config_(

metavar=iden_meta.group_dev_cencli,
help = "Device Identifier, Group Name along with --ap or --gw option, or 'self' to update cencli configuration details.",
help="Device Identifier, Group Name along with --ap or --gw option, or 'self' to update cencli configuration details.",
autocompletion=common.cache.group_dev_ap_gw_completion

@@ -700,3 +702,2 @@ ),

@app.command()

@@ -795,3 +796,3 @@ def wlan(

name: str = typer.Argument(..., show_default=False,),
password: str = typer.Option(None,), # hide_input=True, prompt=True, confirmation_prompt=True),
password: str = typer.Option(None,), # hide_input=True, prompt=True, confirmation_prompt=True),
company: str = typer.Option(None, help="Company Name", show_default=False,),

@@ -798,0 +799,0 @@ phone: str = typer.Option(None, help="Phone # of guest; Format: +[CountryCode][PhoneNumber]", show_default=False,),

@@ -17,2 +17,3 @@ from __future__ import annotations

class GreenLakeAPI:

@@ -52,2 +53,3 @@ _by_workspace: dict[str, GreenLakeAPI] = {}

class CentralAPI:

@@ -54,0 +56,0 @@ _by_workspace: dict[str, CentralAPI] = {}

@@ -18,2 +18,3 @@ from __future__ import annotations

class GLPDevice(TypedDict):

@@ -25,2 +26,3 @@ serial: str

class GreenLakeDevicesAPI:

@@ -75,4 +77,2 @@ def __init__(self, session: Session):

async def get_devices(

@@ -79,0 +79,0 @@ self,

@@ -31,3 +31,2 @@ from __future__ import annotations

params = {

@@ -53,3 +52,2 @@ "filter": query,

params = {

@@ -83,3 +81,2 @@ "filter": query,

params = {

@@ -86,0 +83,0 @@ "filter": query,

@@ -31,3 +31,2 @@ from __future__ import annotations

params = {

@@ -34,0 +33,0 @@ "filter": query,

@@ -49,2 +49,3 @@ # (C) Copyright 2025 Hewlett Packard Enterprise Development LP.

urls = NewCentralURLs() # currently only using Authentication url

@@ -67,3 +68,2 @@

class NewCentralBase:

@@ -97,3 +97,2 @@ def __init__(self, token_info: Path | str | dict[str, dict[str, str]]):

# for app in self.token_info:

@@ -134,3 +133,2 @@ # self.token_info[app]["access_token"] = self.token_info.get("access_token") or access_token

def load_token_from_cache(self) -> str | None:

@@ -144,7 +142,6 @@ if config.cnx_tok_file and config.cnx_tok_file.exists():

if pendulum.now().int_timestamp - 300 > token_data["expires"]:
return # if cached token is within 5 mins of expiration we want to force a refresh
return # if cached token is within 5 mins of expiration we want to force a refresh
return token_data.get("access_token")
def get_access_token(self, app_name: Literal["new_central", "glp"] = "glp") -> str:

@@ -172,3 +169,2 @@ """

try:

@@ -175,0 +171,0 @@ log.info(f"Attempting to create new token from {app_name}")

@@ -80,3 +80,2 @@ from __future__ import annotations

@staticmethod

@@ -139,3 +138,2 @@ def strip_no_value(data: List[dict] | Dict[dict], no_val_strings: List[str] = NO_VAL_STRINGS, aggressive: bool = False,) -> List[dict] | Dict[dict]:

def simple_kv_formatter(

@@ -142,0 +140,0 @@ self,

@@ -15,5 +15,7 @@ from __future__ import annotations

def get_subscriptions(data: List[Dict[str, Any]], verbosity: int = 0) -> List[Dict[str, Any]]:
if not data:
return data
def _to_datetime(date: str, format: TimeFormat = "date-string", format_expiration: bool = None) -> DateTime:

@@ -20,0 +22,0 @@ return DateTime(pendulum.from_format(date.rstrip("Z"), "YYYY-MM-DDTHH:mm:ss.SSS").timestamp(), format=format, format_expiration=format_expiration)

@@ -114,2 +114,3 @@ from __future__ import annotations

class Subscriptions(BaseModel):

@@ -178,3 +179,3 @@ items: List[Subscription]

region: Optional[str] = None
subscription: list[str] | str| None = None
subscription: list[str] | str | None = None
application: str | None = None

@@ -302,3 +303,4 @@

async def get_inventory_with_sub_data(inv_data: Inventory, sub_data: Subscriptions) -> list[dict[str, Any]]:
return [{"id": devid, **dev_data, **sub_data.get_inv_cache_fields(dev_data["subscription"])} for devid, dev_data in inv_data.by_id.items()]

@@ -103,2 +103,3 @@ from __future__ import annotations

con = rich_console or econsole
def abort():

@@ -134,2 +135,3 @@ con.print("\n[dark_orange3]:warning:[/] [red]Aborted[/]", emoji=True)

class CentralURLs(Mapping): # pragma: no cover used in first run wizard which requires tty

@@ -469,3 +471,3 @@ def __init__(self):

# prefer setting at the workspace config level first
#config format v1 (classic)
# config format v1 (classic)
if self.workspace:

@@ -472,0 +474,0 @@ if key in self.data.get(self.workspace, {}):

@@ -17,3 +17,3 @@ #!/usr/bin/env python3

lib_dev_idens = ["ap", "cx", "sw", "switch", "gw", "sdwan"]
generic_lib_dev_idens = ["ap","gw", "switch", "sdwan"]
generic_lib_dev_idens = ["ap", "gw", "switch", "sdwan"]
flex_dual_models = ["615", "605H", "605R"]

@@ -26,3 +26,3 @@ dynamic_antenna_models = ["679"]

DeviceTypes = Literal["ap", "cx", "sw", "gw", "sdwan"]
EventDeviceTypes = Literal["ap","gw", "switch", "client"]
EventDeviceTypes = Literal["ap", "gw", "switch", "client"]
ClientStatus = Literal["FAILED_TO_CONNECT", "CONNECTED"]

@@ -118,2 +118,3 @@ ClientType = Literal["wired", "wireless", "all"]

class ClusterName(str, Enum):

@@ -216,2 +217,3 @@ internal = "internal"

class PoEDetectionStatus(Enum):

@@ -255,2 +257,3 @@ NA = 0

# Not used currently # TODO reference in cleaner

@@ -353,2 +356,3 @@ class SwitchRoles(Enum):

class GatewayRole(str, Enum):

@@ -449,2 +453,3 @@ branch = "branch"

class DynamicAntMode(str, Enum):

@@ -454,2 +459,3 @@ narrow = "narrow"

class APIAction(str, Enum):

@@ -460,2 +466,3 @@ ADD = "ADD"

class RadioMode(str, Enum):

@@ -466,2 +473,3 @@ access = "access"

class UplinkNames(str, Enum):

@@ -474,2 +482,3 @@ uplink101 = "uplink101"

# Not used ... for reference

@@ -514,2 +523,3 @@ # class RadioNumber(Enum):

class CancelWhat(str, Enum):

@@ -1104,2 +1114,3 @@ device = "device"

class SortDevOptions(str, Enum):

@@ -1163,2 +1174,3 @@ name = "name"

class SortCertOptions(str, Enum):

@@ -1386,4 +1398,6 @@ name = "name"

iden_meta = IdenMetaVars()
class LogSortBy(str, Enum):

@@ -1476,2 +1490,3 @@ time = "time"

class SiteStates(str, Enum):

@@ -1536,2 +1551,3 @@ AL = Alabama = "Alabama",

TZDB = Literal[

@@ -2133,3 +2149,3 @@ "Africa/Abidjan",

IAP_TZ_NAMES = Literal[
IAP_TZ_NAMES = Literal[
"none",

@@ -2294,2 +2310,3 @@ "International-Date-Line-West",

class IAPTimeZoneNames(str, Enum):

@@ -2454,2 +2471,3 @@ none = "none"

NO_LOAD_COMMANDS = [

@@ -2456,0 +2474,0 @@ "show config cencli",

@@ -10,2 +10,3 @@ from os import environ

env_var = EnvVar()

@@ -60,2 +61,3 @@ classic_env_var = EnvVar("ARUBACLI_ACCOUNT", "ARUBACLI_DEBUG")

env = Env()

@@ -5,8 +5,11 @@ # Aruba Central API GW ISSUES

class DevException(ArubaCentralException):
pass
class TimeoutException(ArubaCentralException):
pass
# CentralCLI Exceptions

@@ -16,17 +19,23 @@ class CentralCliException(Exception):

class MissingFieldException(CentralCliException):
pass
class MissingRequiredArgumentException(TypeError):
pass
class ImportException(CentralCliException):
pass
class InvalidConfigException(CentralCliException):
pass
class ConfigNotFoundException(CentralCliException):
pass
class WorkSpaceNotFoundException(CentralCliException):

@@ -40,6 +49,8 @@ pass

class RefreshFailedException(ServiceNowException):
pass
class IncidentException(ServiceNowException):
pass

@@ -39,2 +39,3 @@ from __future__ import annotations

class MyLogger:

@@ -59,4 +60,4 @@ def __init__(self, log_file: str | Path, debug: bool = False, show: bool = False, verbose: bool = False, deprecation_warnings: str | list[str] = None):

self.exception = partial(self.log_print, level="exception", exc_info=True)
self.critical = partial(self.log_print, level="critical")
self.fatal = partial(self.log_print, level="fatal")
self.critical = partial(self.log_print, level="critical")
self.fatal = partial(self.log_print, level="fatal")

@@ -78,3 +79,3 @@ def __getattr__(self, name: str) -> Any: # pragma: no cover Exists only as a convenience when debugging

handlers=[
RotatingFileHandler(self.log_file.absolute(), maxBytes=900_000, backupCount=5,),
RotatingFileHandler(self.log_file.absolute(), maxBytes=900_000, backupCount=5,),
],

@@ -102,6 +103,2 @@ )

def follow(self, pytest: bool = False) -> None: # pragma: no cover requires a tty

@@ -108,0 +105,0 @@ """generator function that yields new lines in log file"""

@@ -120,6 +120,6 @@ from __future__ import annotations

def cache_dump(self) -> list[dict[str, str | int | bool]]: # currently no adjustments from model_dump. use json.loads(self.model_dump_json()) with customer json serializer if adjustments needed in future.
return self.model_dump()
class DeviceStatus(str, Enum):

@@ -476,2 +476,3 @@ Up = "Up"

class Mpsks(RootModel):

@@ -581,2 +582,3 @@ root: List[Mpsk]

class Guests(RootModel):

@@ -609,2 +611,3 @@ root: List[Guest]

class Campus(BaseModel): # pragma: no cover Not currently used or needed in the cache

@@ -614,2 +617,3 @@ id: str = Field(alias=AliasChoices("id", "campus_id"))

class Building(BaseModel):

@@ -640,2 +644,3 @@ id: str = Field(alias=AliasChoices("id", "building_id"))

class BuildingResponses(RootModel):

@@ -698,2 +703,3 @@ root: Buildings

class Floors(RootModel):

@@ -700,0 +706,0 @@ root: list[VisualRFFloor]

@@ -20,4 +20,6 @@ from __future__ import annotations

default = Defaults()
def _ensure_base_urls(data: dict) -> Dict[str, Any]:

@@ -36,2 +38,3 @@ if "cluster" in data and data["cluster"] in CLUSTER_URLS:

# CNX New Central

@@ -38,0 +41,0 @@ class Glp(BaseModel):

@@ -113,2 +113,3 @@ from __future__ import annotations

# MAC Imports for Cloud Auth

@@ -120,2 +121,3 @@ class ImportMAC(BaseModel):

class ImportMACs(RootModel):

@@ -166,2 +168,3 @@ root: List[ImportMAC]

class _ImportDevice(BaseModel):

@@ -198,3 +201,3 @@ model_config = ConfigDict(use_enum_values=True, arbitrary_types_allowed=True, ignored_types=(CacheSub,))

key, value = i.split(":")
tags[key] =value
tags[key] = value
else:

@@ -205,2 +208,3 @@ tags[i] = ""

class ImportDevice(_ImportDevice):

@@ -297,2 +301,3 @@ _cache: Cache = PrivateAttr(None)

class ImportDevices(RootModel):

@@ -355,3 +360,3 @@ root: list[ImportDevice]

ret = {}
hash_to_tags = {}
hash_to_tags = {}
for dev in self.root:

@@ -373,3 +378,2 @@ if dev.tags:

def serials_by_subscription_id(self, assigned: bool = None) -> dict[str, BySubId]:

@@ -376,0 +380,0 @@ subs: set[CacheSub] = set(self._cache.get_sub_identifier(dev.subscription, silent=True, best_match=True) for dev in self.root if dev.subscription)

@@ -7,3 +7,2 @@ from __future__ import annotations

# WebHook Models WebHookDetails no reliable source for all possible fields.

@@ -10,0 +9,0 @@ class WebHookDetails(BaseModel):

@@ -86,3 +86,2 @@ """object Classes"""

@property

@@ -120,3 +119,2 @@ def is_expired(self) -> bool:

@property

@@ -153,3 +151,3 @@ def day_datetime(self) -> str:

_words = pendulum.duration(seconds=int(self.ts)).in_words()
value_pairs = [(int(_words.split()[idx]), _words.split()[idx + 1]) for idx in range(0, len(_words.split()), 2)]
value_pairs = [(int(_words.split()[idx]), _words.split()[idx + 1]) for idx in range(0, len(_words.split()), 2)]
words, minute = "", None

@@ -231,2 +229,3 @@ for value, word in value_pairs:

class ShowInterfaceFilters:

@@ -267,3 +266,3 @@ def __init__(self, up: bool = False, down: bool = False, slow: bool = False, fast: bool = False):

"""
valid=True
valid = True
if all([self.up, self.down]):

@@ -270,0 +269,0 @@ valid = False

@@ -25,4 +25,2 @@ # -*- coding: utf-8 -*-

DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0b\x61udit.proto\x12\x05\x41udit\"\x1b\n\x0bmac_address\x12\x0c\n\x04\x61\x64\x64r\x18\x01 \x01(\x0c\"\x99\x01\n\nip_address\x12)\n\x02\x61\x66\x18\x01 \x01(\x0e\x32\x1d.Audit.ip_address.addr_family\x12\x0c\n\x04\x61\x64\x64r\x18\x02 \x01(\x0c\"R\n\x0b\x61\x64\x64r_family\x12\x16\n\x12\x41\x44\x44R_FAMILY_UNSPEC\x10\x00\x12\x14\n\x10\x41\x44\x44R_FAMILY_INET\x10\x01\x12\x15\n\x11\x41\x44\x44R_FAMILY_INET6\x10\x02\"-\n\x06\x63onfig\x12\x0c\n\x04\x64\x61ta\x18\x01 \x02(\t\x12\x15\n\rdetailed_data\x18\x02 \x01(\t\"/\n\x08\x66irmware\x12\x0c\n\x04\x64\x61ta\x18\x01 \x02(\t\x12\x15\n\rdetailed_data\x18\x02 \x01(\t\"8\n\x11\x64\x65vice_management\x12\x0c\n\x04\x64\x61ta\x18\x01 \x02(\t\x12\x15\n\rdetailed_data\x18\x02 \x01(\t\"\xb2\x02\n\raudit_message\x12\x13\n\x0b\x63ustomer_id\x18\x01 \x02(\t\x12\x11\n\ttimestamp\x18\x02 \x02(\r\x12&\n\x07service\x18\x03 \x02(\x0e\x32\x15.Audit.classification\x12\x12\n\ngroup_name\x18\x04 \x02(\t\x12\x0e\n\x06target\x18\x05 \x02(\t\x12$\n\tclient_ip\x18\x06 \x02(\x0b\x32\x11.Audit.ip_address\x12\x10\n\x08username\x18\x07 \x02(\t\x12\"\n\x0b\x63onfig_info\x18\x08 \x01(\x0b\x32\r.Audit.config\x12&\n\rfirmware_info\x18\t \x01(\x0b\x32\x0f.Audit.firmware\x12)\n\x07\x64m_info\x18\x10 \x01(\x0b\x32\x18.Audit.device_management*B\n\x0e\x63lassification\x12\x11\n\rCONFIGURATION\x10\x00\x12\x0c\n\x08\x46IRMWARE\x10\x01\x12\x0f\n\x0b\x44\x45VICE_MGMT\x10\x02')

@@ -35,18 +33,18 @@

DESCRIPTOR._loaded_options = None
_globals['_CLASSIFICATION']._serialized_start=670
_globals['_CLASSIFICATION']._serialized_end=736
_globals['_MAC_ADDRESS']._serialized_start=22
_globals['_MAC_ADDRESS']._serialized_end=49
_globals['_IP_ADDRESS']._serialized_start=52
_globals['_IP_ADDRESS']._serialized_end=205
_globals['_IP_ADDRESS_ADDR_FAMILY']._serialized_start=123
_globals['_IP_ADDRESS_ADDR_FAMILY']._serialized_end=205
_globals['_CONFIG']._serialized_start=207
_globals['_CONFIG']._serialized_end=252
_globals['_FIRMWARE']._serialized_start=254
_globals['_FIRMWARE']._serialized_end=301
_globals['_DEVICE_MANAGEMENT']._serialized_start=303
_globals['_DEVICE_MANAGEMENT']._serialized_end=359
_globals['_AUDIT_MESSAGE']._serialized_start=362
_globals['_AUDIT_MESSAGE']._serialized_end=668
_globals['_CLASSIFICATION']._serialized_start = 670
_globals['_CLASSIFICATION']._serialized_end = 736
_globals['_MAC_ADDRESS']._serialized_start = 22
_globals['_MAC_ADDRESS']._serialized_end = 49
_globals['_IP_ADDRESS']._serialized_start = 52
_globals['_IP_ADDRESS']._serialized_end = 205
_globals['_IP_ADDRESS_ADDR_FAMILY']._serialized_start = 123
_globals['_IP_ADDRESS_ADDR_FAMILY']._serialized_end = 205
_globals['_CONFIG']._serialized_start = 207
_globals['_CONFIG']._serialized_end = 252
_globals['_FIRMWARE']._serialized_start = 254
_globals['_FIRMWARE']._serialized_end = 301
_globals['_DEVICE_MANAGEMENT']._serialized_start = 303
_globals['_DEVICE_MANAGEMENT']._serialized_end = 359
_globals['_AUDIT_MESSAGE']._serialized_start = 362
_globals['_AUDIT_MESSAGE']._serialized_end = 668
# @@protoc_insertion_point(module_scope)

@@ -25,4 +25,2 @@ # -*- coding: utf-8 -*-

DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10monitoring.proto\x12\nMonitoring\"\x84\x01\n\tIpAddress\x12-\n\x02\x61\x66\x18\x01 \x02(\x0e\x32!.Monitoring.IpAddress.addr_family\x12\x0c\n\x04\x61\x64\x64r\x18\x02 \x02(\x0c\":\n\x0b\x61\x64\x64r_family\x12\x14\n\x10\x41\x44\x44R_FAMILY_INET\x10\x02\x12\x15\n\x11\x41\x44\x44R_FAMILY_INET6\x10\n\"\x1a\n\nMacAddress\x12\x0c\n\x04\x61\x64\x64r\x18\x01 \x02(\x0c\"\xf2\x01\n\x05Swarm\x12*\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x12.Monitoring.Action:\x06UPDATE\x12\x10\n\x08swarm_id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12&\n\x06status\x18\x04 \x01(\x0e\x32\x12.Monitoring.Status:\x02UP\x12\x30\n\x11public_ip_address\x18\x05 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12)\n\nip_address\x18\x06 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12\x18\n\x10\x66irmware_version\x18\x07 \x01(\t\"\xdf\x02\n\x06Tunnel\x12*\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x12.Monitoring.Action:\x06UPDATE\x12\x10\n\x08swarm_id\x18\x02 \x01(\t\x12&\n\x05index\x18\x03 \x01(\x0e\x32\x17.Monitoring.TunnelIndex\x12+\n\x0b\x63rypto_type\x18\x04 \x01(\x0e\x32\x16.Monitoring.CryptoType\x12\x11\n\tpeer_name\x18\x05 \x01(\t\x12*\n\x0bpeer_tun_ip\x18\x06 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12(\n\ttunnel_ip\x18\x07 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12&\n\x06status\x18\x08 \x01(\x0e\x32\x12.Monitoring.Status:\x02UP\x12\x0e\n\x06\x61\x63tive\x18\t \x01(\x08\x12\x0e\n\x06uptime\x18\n \x01(\r\x12\x11\n\ttunnel_id\x18\x0b \x01(\x04\"\xc1\x0e\n\tInterface\x12*\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x12.Monitoring.Action:\x06UPDATE\x12\x11\n\tdevice_id\x18\x02 \x01(\t\x12\'\n\x07macaddr\x18\x03 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12&\n\x06status\x18\x04 \x01(\x0e\x32\x12.Monitoring.Status:\x02UP\x12%\n\x06ipaddr\x18\x05 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12\x31\n\x0b\x64uplex_mode\x18\x06 \x01(\x0e\x32\x1c.Monitoring.Interface.Duplex\x12\x0c\n\x04name\x18\x07 \x01(\t\x12\x13\n\x0bport_number\x18\x08 \x01(\t\x12,\n\x04type\x18\t \x01(\x0e\x32\x1e.Monitoring.Interface.IntfType\x12\x0c\n\x04mode\x18\n \x01(\t\x12\x0c\n\x04vlan\x18\x0b \x01(\r\x12\x35\n\x07has_poe\x18\x0c \x01(\x0e\x32 .Monitoring.Interface.PoeSupport:\x02NA\x12)\n\tpoe_state\x18\r \x01(\x0e\x32\x12.Monitoring.Status:\x02UP\x12*\n\noper_state\x18\x0e \x01(\x0e\x32\x12.Monitoring.Status:\x02UP\x12+\n\x0b\x61\x64min_state\x18\x0f \x01(\x0e\x32\x12.Monitoring.Status:\x02UP\x12.\n\x05speed\x18\x10 \x01(\x0e\x32\x1f.Monitoring.Interface.SpeedType\x12\x0b\n\x03mux\x18\x11 \x01(\r\x12\x0f\n\x07trusted\x18\x12 \x01(\r\x12\x0c\n\x04slot\x18\x13 \x01(\t\x12\x30\n\x08phy_type\x18\x14 \x01(\x0e\x32\x1e.Monitoring.Interface.PortType\x12\x10\n\x08sub_type\x18\x15 \x01(\t\x12\x14\n\x0c\x61llowed_vlan\x18\x16 \x03(\r\x12\x13\n\x0bnative_vlan\x18\x17 \x01(\r\x12\x13\n\x0bvsx_enabled\x18\x18 \x01(\x08\x12@\n\x11state_down_reason\x18\x19 \x01(\x0e\x32%.Monitoring.Interface.StateDownReason\x12\x32\n\tvlan_mode\x18\x1a \x01(\x0e\x32\x1f.Monitoring.Interface.VlanModes\"&\n\x06\x44uplex\x12\x08\n\x04HALF\x10\x01\x12\x08\n\x04\x46ULL\x10\x02\x12\x08\n\x04\x41UTO\x10\x03\"\x91\x01\n\x08IntfType\x12\x0c\n\x08\x45THERNET\x10\x01\x12\x0c\n\x08LOOPBACK\x10\x02\x12\x08\n\x04VLAN\x10\x03\x12\n\n\x06TUNNEL\x10\x04\x12\x10\n\x0cPORT_CHANNEL\x10\x05\x12\x0b\n\x07STANDBY\x10\x06\x12\n\n\x06\x42RIDGE\x10\x07\x12\t\n\x05SPLIT\x10\x08\x12\t\n\x05STACK\x10\t\x12\x08\n\x04MGMT\x10\n\x12\x08\n\x04NONE\x10\x0b\"l\n\tSpeedType\x12\x11\n\rSPEED_INVALID\x10\x00\x12\x0e\n\nSPEED_AUTO\x10\x01\x12\x0c\n\x08SPEED_10\x10\x02\x12\r\n\tSPEED_100\x10\x03\x12\x0e\n\nSPEED_1000\x10\x04\x12\x0f\n\x0bSPEED_10000\x10\x05\"J\n\x08PortType\x12\x0b\n\x07PT_RJ45\x10\x00\x12\x0b\n\x07PT_GBIC\x10\x01\x12\r\n\tPT_SERIAL\x10\x02\x12\n\n\x06PT_USB\x10\x03\x12\t\n\x05PT_X2\x10\x04\"6\n\nPoeSupport\x12\x06\n\x02NA\x10\x00\x12\r\n\tSUPPORTED\x10\x01\x12\x11\n\rNOT_SUPPORTED\x10\x02\"\xdc\x03\n\x0fStateDownReason\x12\x11\n\rUNINITIALIZED\x10\x01\x12\x14\n\x10WAITING_FOR_LINK\x10\x02\x12\x18\n\x14\x41\x44MIN_INTERFACE_DOWN\x10\x03\x12\x12\n\x0eMODULE_MISSING\x10\x04\x12\x17\n\x13MODULE_UNRECOGNIZED\x10\x05\x12\x16\n\x12MODULE_UNSUPPORTED\x10\x06\x12\x17\n\x13MODULE_INCOMPATIBLE\x10\x07\x12\x10\n\x0cMODULE_FAULT\x10\x08\x12\x18\n\x14GROUP_SPEED_MISMATCH\x10\t\x12\x0f\n\x0bLANES_SPLIT\x10\n\x12\x13\n\x0fLANES_NOT_SPLIT\x10\x0b\x12\x0f\n\x0bINVALID_MTU\x10\x0c\x12\x12\n\x0eINVALID_SPEEDS\x10\r\x12\x19\n\x15\x41UTONEG_NOT_SUPPORTED\x10\x0e\x12\x14\n\x10\x41UTONEG_REQUIRED\x10\x0f\x12\x14\n\x10INTERFACE_ABSENT\x10\x10\x12\x1d\n\x19PHYSICAL_INTERFACE_FAILED\x10\x11\x12\x1e\n\x1aPSPO_ENABLEMENT_LAYER_DOWN\x10\x12\x12\x19\n\x15\x43\x41RD_INTERFACE_ERRORS\x10\x13\x12\x10\n\x0cINTERFACE_OK\x10\x14\"?\n\tVlanModes\x12\n\n\x06\x41\x43\x43\x45SS\x10\x01\x12\x11\n\rNATIVE_TAGGED\x10\x02\x12\x13\n\x0fNATIVE_UNTAGGED\x10\x03\"\xd1\x01\n\x07VapInfo\x12*\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x12.Monitoring.Action:\x06UPDATE\x12\x11\n\tdevice_id\x18\x02 \x01(\t\x12)\n\tradio_mac\x18\x03 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12\r\n\x05\x65ssid\x18\x04 \x01(\x0c\x12&\n\x06\x61p_mac\x18\x05 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12%\n\x05\x62ssid\x18\x06 \x01(\x0b\x32\x16.Monitoring.MacAddress\"\x84\x02\n\x05Radio\x12*\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x12.Monitoring.Action:\x06UPDATE\x12\x11\n\tdevice_id\x18\x02 \x01(\t\x12\r\n\x05index\x18\x03 \x01(\r\x12\'\n\x07macaddr\x18\x04 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12&\n\x06status\x18\x05 \x01(\x0e\x32\x12.Monitoring.Status:\x02UP\x12\x0f\n\x07\x63hannel\x18\x06 \x01(\t\x12\x0c\n\x04\x62\x61nd\x18\x07 \x01(\r\x12\x15\n\rchannel_width\x18\x08 \x01(\r\x12&\n\x06\x61p_mac\x18\t \x01(\x0b\x32\x16.Monitoring.MacAddress\"\xc5\x03\n\x02\x41p\x12*\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x12.Monitoring.Action:\x06UPDATE\x12\x0e\n\x06serial\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\'\n\x07macaddr\x18\x04 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12\x12\n\ncluster_id\x18\x05 \x01(\t\x12&\n\x06status\x18\x06 \x01(\x0e\x32\x12.Monitoring.Status:\x02UP\x12)\n\nip_address\x18\x07 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12\r\n\x05model\x18\x08 \x01(\t\x12\x11\n\tmesh_role\x18\t \x01(\t\x12\x0c\n\x04mode\x18\n \x01(\t\x12\x14\n\x0cswarm_master\x18\x0b \x01(\x08\x12\x17\n\x0fmodem_connected\x18\x0c \x01(\x08\x12.\n\x0buplink_type\x18\r \x01(\x0e\x32\x19.Monitoring.Ap.UplinkType\x12\x18\n\x10\x66irmware_version\x18\x0e \x01(\t\"<\n\nUplinkType\x12\x0c\n\x08\x45THERNET\x10\x01\x12\x08\n\x04MESH\x10\x02\x12\x0b\n\x07STATION\x10\x03\x12\t\n\x05MODEM\x10\x04\"v\n\x07Network\x12*\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x12.Monitoring.Action:\x06UPDATE\x12\x10\n\x08swarm_id\x18\x02 \x01(\t\x12\r\n\x05\x65ssid\x18\x03 \x01(\x0c\x12\x10\n\x08security\x18\x04 \x01(\t\x12\x0c\n\x04type\x18\x05 \x01(\t\"\xf5\x02\n\x0eWirelessClient\x12*\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x12.Monitoring.Action:\x06UPDATE\x12\'\n\x07macaddr\x18\x02 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12\x0c\n\x04name\x18\x03 \x01(\t\x12)\n\nip_address\x18\x04 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12\x10\n\x08username\x18\x05 \x01(\t\x12\x19\n\x11\x61ssociated_device\x18\x06 \x01(\t\x12)\n\tradio_mac\x18\x07 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12\x0f\n\x07network\x18\x08 \x01(\x0c\x12\x11\n\tuser_role\x18\t \x01(\t\x12\x14\n\x0cmanufacturer\x18\n \x01(\t\x12\x0f\n\x07os_type\x18\x0b \x01(\t\x12\x12\n\nconnection\x18\x0c \x01(\t\x12\x10\n\x08maxspeed\x18\r \x01(\r\x12\x0c\n\x04vlan\x18\x0e \x01(\r\"\xb8\x01\n\x0eHardwareModule\x12\r\n\x05index\x18\x01 \x01(\r\x12\x39\n\x06status\x18\x02 \x01(\x0e\x32).Monitoring.HardwareModule.HardwareStatus\"\\\n\x0eHardwareStatus\x12\x06\n\x02OK\x10\x00\x12\t\n\x05\x45RROR\x10\x01\x12\x11\n\rNOT_CONNECTED\x10\x02\x12\n\n\x06\x41\x43TIVE\x10\x03\x12\x0b\n\x07STANDBY\x10\x04\x12\x0b\n\x07OFFLINE\x10\x05\"\xf8\x05\n\x06Switch\x12*\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x12.Monitoring.Action:\x06UPDATE\x12\x0e\n\x06serial\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\'\n\x07macaddr\x18\x04 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12\r\n\x05model\x18\x05 \x01(\t\x12&\n\x06status\x18\x06 \x01(\x0e\x32\x12.Monitoring.Status:\x02UP\x12\x30\n\x11public_ip_address\x18\x07 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12)\n\nip_address\x18\x08 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12\x18\n\x10\x66irmware_version\x18\t \x01(\t\x12.\n\x0f\x64\x65\x66\x61ult_gateway\x18\n \x01(\x0b\x32\x15.Monitoring.IpAddress\x12\x13\n\x0b\x64\x65vice_mode\x18\x0b \x01(\r\x12\x14\n\x0cuplink_ports\x18\x0c \x03(\t\x12\x11\n\tmax_slots\x18\r \x01(\r\x12\x12\n\nused_slots\x18\x0e \x03(\t\x12\x36\n\x12management_modules\x18\x0f \x03(\x0b\x32\x1a.Monitoring.HardwareModule\x12\x32\n\x0epower_supplies\x18\x10 \x03(\x0b\x32\x1a.Monitoring.HardwareModule\x12\x10\n\x08stack_id\x18\x11 \x01(\t\x12\x17\n\x0fstack_member_id\x18\x12 \x01(\r\x12=\n\x11stack_member_role\x18\x13 \x01(\x0e\x32\".Monitoring.Switch.StackMemberRole\x12-\n\rstack_macaddr\x18\x14 \x01(\x0b\x32\x16.Monitoring.MacAddress\"F\n\x0fStackMemberRole\x12\x0b\n\x07UNKNOWN\x10\x01\x12\r\n\tCOMMANDER\x10\x02\x12\x0b\n\x07STANDBY\x10\x03\x12\n\n\x06MEMBER\x10\x04\"\xdc\x03\n\x0bSwitchStack\x12*\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x12.Monitoring.Action:\x06UPDATE\x12\x10\n\x08stack_id\x18\x02 \x01(\t\x12&\n\x06status\x18\x03 \x01(\x0e\x32\x12.Monitoring.Status:\x02UP\x12\x37\n\x08topology\x18\x04 \x01(\x0e\x32%.Monitoring.SwitchStack.StackTopology\x12\x33\n\x06policy\x18\x05 \x01(\x0e\x32#.Monitoring.SwitchStack.StackPolicy\x12\x18\n\x10\x66irmware_version\x18\x06 \x01(\t\x12\x15\n\rvsf_domain_id\x18\x07 \x01(\r\"]\n\rStackTopology\x12\x0e\n\nSTANDALONE\x10\x01\x12\t\n\x05\x43HAIN\x10\x02\x12\x08\n\x04RING\x10\x03\x12\x08\n\x04MESH\x10\x04\x12\x10\n\x0cPARTIAL_MESH\x10\x05\x12\x0b\n\x07UNKNOWN\x10\x06\"i\n\x0bStackPolicy\x12\x17\n\x13STACK_SPLIT_UNKNOWN\x10\x00\x12\x1f\n\x1bSTACK_SPLIT_ONE_FRAGMENT_UP\x10\x01\x12 \n\x1cSTACK_SPLIT_ALL_FRAGMENTS_UP\x10\x02\"\xc1\x02\n\x0bWiredClient\x12*\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x12.Monitoring.Action:\x06UPDATE\x12\'\n\x07macaddr\x18\x02 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12\x0c\n\x04name\x18\x03 \x01(\t\x12)\n\nip_address\x18\x04 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12\x10\n\x08username\x18\x05 \x01(\t\x12\x19\n\x11\x61ssociated_device\x18\x06 \x01(\t\x12-\n\rinterface_mac\x18\x07 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12\x11\n\tuser_role\x18\x08 \x01(\t\x12\x0c\n\x04vlan\x18\t \x01(\r\x12\'\n\tauth_type\x18\n \x01(\x0e\x32\x14.Monitoring.AuthType\"\xcb\x03\n\x12MobilityController\x12*\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x12.Monitoring.Action:\x06UPDATE\x12\x0e\n\x06serial\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\'\n\x07macaddr\x18\x04 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12\r\n\x05model\x18\x05 \x01(\t\x12&\n\x06status\x18\x06 \x01(\x0e\x32\x12.Monitoring.Status:\x02UP\x12\x30\n\x11public_ip_address\x18\x07 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12)\n\nip_address\x18\x08 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12\x18\n\x10\x66irmware_version\x18\t \x01(\t\x12.\n\x0f\x64\x65\x66\x61ult_gateway\x18\n \x01(\x0b\x32\x15.Monitoring.IpAddress\x12;\n\x04mode\x18\x0b \x01(\x0e\x32-.Monitoring.MobilityController.ControllerMode\"\'\n\x0e\x43ontrollerMode\x12\x0b\n\x07GATEWAY\x10\x00\x12\x08\n\x04VPNC\x10\x01\"\xe9\x02\n\x06Uplink\x12*\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x12.Monitoring.Action:\x06UPDATE\x12\x11\n\tdevice_id\x18\x02 \x01(\t\x12\x12\n\nlink_index\x18\x03 \x01(\x04\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x05 \x01(\t\x12\x10\n\x08priority\x18\x06 \x01(\r\x12\"\n\x06status\x18\x07 \x01(\x0e\x32\x12.Monitoring.Status\x12&\n\nwan_status\x18\x08 \x01(\x0e\x32\x12.Monitoring.Status\x12\x0c\n\x04vlan\x18\t \x01(\r\x12\x18\n\x10vlan_description\x18\n \x01(\t\x12\x30\n\x11public_ip_address\x18\x0b \x01(\x0b\x32\x15.Monitoring.IpAddress\x12\x31\n\x12private_ip_address\x18\x0c \x01(\x0b\x32\x15.Monitoring.IpAddress\"\xb3\x02\n\tIkeTunnel\x12*\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x12.Monitoring.Action:\x06UPDATE\x12\x11\n\tdevice_id\x18\x02 \x01(\t\x12\x0e\n\x06map_id\x18\x03 \x01(\x04\x12(\n\x08peer_mac\x18\x04 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12)\n\tlocal_mac\x18\x05 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12%\n\x06src_ip\x18\x06 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12%\n\x06\x64st_ip\x18\x07 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12\"\n\x06status\x18\x08 \x01(\x0e\x32\x12.Monitoring.Status\x12\x10\n\x08map_name\x18\t \x01(\t\"\xc5\x02\n\x0b\x44\x65viceStats\x12\x11\n\tdevice_id\x18\x01 \x01(\t\x12\x11\n\ttimestamp\x18\x02 \x01(\r\x12\x0e\n\x06uptime\x18\x03 \x01(\x04\x12\x17\n\x0f\x63pu_utilization\x18\x04 \x01(\r\x12\x11\n\tmem_total\x18\x05 \x01(\x04\x12\x10\n\x08mem_free\x18\x06 \x01(\x04\x12\x19\n\x11power_consumption\x18\x07 \x01(\r\x12\x11\n\tfan_speed\x18\x08 \x01(\r\x12\x13\n\x0btemperature\x18\t \x01(\r\x12&\n\nfan_status\x18\n \x01(\x0e\x32\x12.Monitoring.Status\x12\x11\n\tmax_power\x18\x0b \x01(\r\x12\x17\n\x0fpoe_consumption\x18\x0c \x01(\r\x12\x12\n\npoe_budget\x18\r \x01(\r\x12\x17\n\x0fmem_utilization\x18\x0e \x01(\x04\"\xdd\x01\n\nRadioStats\x12\x11\n\tdevice_id\x18\x01 \x01(\t\x12\'\n\x07macaddr\x18\x02 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12\x11\n\ttimestamp\x18\x03 \x01(\r\x12\x10\n\x08tx_bytes\x18\x04 \x01(\x04\x12\x10\n\x08rx_bytes\x18\x05 \x01(\x04\x12\x10\n\x08tx_drops\x18\x06 \x01(\r\x12\x10\n\x08tx_power\x18\x07 \x01(\r\x12\x13\n\x0bnoise_floor\x18\x08 \x01(\r\x12\x13\n\x0butilization\x18\t \x01(\r\x12\x0e\n\x06rx_bad\x18\n \x01(\x04\"\x90\x01\n\x08VapStats\x12\x11\n\tdevice_id\x18\x01 \x01(\t\x12)\n\tradio_mac\x18\x02 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12\x0f\n\x07network\x18\x03 \x01(\x0c\x12\x11\n\ttimestamp\x18\x04 \x01(\r\x12\x10\n\x08tx_bytes\x18\x05 \x01(\x04\x12\x10\n\x08rx_bytes\x18\x06 \x01(\x04\"\xb9\x01\n\x0bTunnelStats\x12\x10\n\x08swarm_id\x18\x01 \x01(\t\x12&\n\x05index\x18\x02 \x01(\x0e\x32\x17.Monitoring.TunnelIndex\x12\x11\n\ttimestamp\x18\x03 \x01(\r\x12\x10\n\x08tx_bytes\x18\x04 \x01(\x04\x12\x10\n\x08rx_bytes\x18\x05 \x01(\x04\x12\x11\n\ttunnel_id\x18\x06 \x01(\x04\x12\x13\n\x0btunnel_name\x18\x07 \x01(\t\x12\x11\n\tdevice_id\x18\x08 \x01(\t\"\xda\x01\n\x0b\x43lientStats\x12\x11\n\tdevice_id\x18\x01 \x01(\t\x12\'\n\x07macaddr\x18\x02 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12\x11\n\ttimestamp\x18\x03 \x01(\r\x12\x10\n\x08tx_bytes\x18\x04 \x01(\x04\x12\x10\n\x08rx_bytes\x18\x05 \x01(\x04\x12\x12\n\nrx_retries\x18\x06 \x01(\r\x12\x12\n\ntx_retries\x18\x07 \x01(\r\x12\r\n\x05speed\x18\x08 \x01(\r\x12\x14\n\x0csignal_in_db\x18\t \x01(\r\x12\x0b\n\x03snr\x18\n \x01(\r\"\xa8\x05\n\x0eInterfaceStats\x12\x11\n\tdevice_id\x18\x01 \x01(\t\x12\'\n\x07macaddr\x18\x02 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12\x11\n\ttimestamp\x18\x03 \x01(\r\x12\x10\n\x08tx_bytes\x18\x04 \x01(\x04\x12\x10\n\x08rx_bytes\x18\x05 \x01(\x04\x12\x19\n\x11power_consumption\x18\x06 \x01(\r\x12\x11\n\tin_errors\x18\x07 \x01(\x04\x12\x12\n\nout_errors\x18\x08 \x01(\x04\x12\x13\n\x0bin_discards\x18\t \x01(\x04\x12\x14\n\x0cout_discards\x18\n \x01(\x04\x12\x12\n\nin_packets\x18\x0b \x01(\x04\x12\x13\n\x0bout_packets\x18\x0c \x01(\x04\x12\x14\n\x0cin_other_err\x18\r \x01(\r\x12\x18\n\x10in_multicast_pkt\x18\x0e \x01(\x04\x12\x18\n\x10in_broadcast_pkt\x18\x0f \x01(\x04\x12\x16\n\x0ein_unicast_pkt\x18\x10 \x01(\x04\x12\x19\n\x11out_multicast_pkt\x18\x11 \x01(\x04\x12\x19\n\x11out_broadcast_pkt\x18\x12 \x01(\x04\x12\x17\n\x0fout_unicast_pkt\x18\x13 \x01(\x04\x12\x0e\n\x06in_fcs\x18\x14 \x01(\x04\x12\x14\n\x0cin_alignment\x18\x15 \x01(\x04\x12\x1f\n\x17out_excessive_collision\x18\x16 \x01(\r\x12\x12\n\nin_jabbers\x18\x17 \x01(\x04\x12\x15\n\rin_fragmented\x18\x18 \x01(\x04\x12\x10\n\x08in_giant\x18\x19 \x01(\r\x12\x0f\n\x07in_runt\x18\x1a \x01(\r\x12\x15\n\rout_collision\x18\x1b \x01(\x04\x12\x1a\n\x12out_late_collision\x18\x1c \x01(\r\x12\x14\n\x0cout_deferred\x18\x1d \x01(\r\"\xbc\x01\n\x0bUplinkStats\x12\x11\n\tdevice_id\x18\x01 \x01(\t\x12\x0f\n\x07link_id\x18\x02 \x01(\r\x12\x11\n\ttimestamp\x18\x03 \x01(\r\x12\x10\n\x08tx_bytes\x18\x04 \x01(\x04\x12\x10\n\x08rx_bytes\x18\x05 \x01(\x04\x12\x17\n\x0ftunnel_tx_bytes\x18\x06 \x01(\x04\x12\x17\n\x0ftunnel_rx_bytes\x18\x07 \x01(\x04\x12\x0e\n\x06map_id\x18\x08 \x01(\x04\x12\x10\n\x08map_name\x18\t \x01(\t\"\x94\x01\n\x0eUplinkWanStats\x12\x11\n\tdevice_id\x18\x01 \x01(\t\x12\x0f\n\x07link_id\x18\x02 \x01(\r\x12\x11\n\ttimestamp\x18\x03 \x01(\r\x12\x18\n\x10\x63ompressed_bytes\x18\x04 \x01(\x04\x12\x1a\n\x12uncompressed_bytes\x18\x05 \x01(\x04\x12\x15\n\rsavings_bytes\x18\x06 \x01(\x04\"V\n\nModemStats\x12\x11\n\tdevice_id\x18\x01 \x01(\t\x12\x11\n\ttimestamp\x18\x02 \x01(\r\x12\x10\n\x08tx_bytes\x18\x03 \x01(\x04\x12\x10\n\x08rx_bytes\x18\x04 \x01(\x04\"h\n\tRoleStats\x12\x11\n\tdevice_id\x18\x01 \x01(\t\x12\x11\n\tuser_role\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\r\x12\x10\n\x08tx_bytes\x18\x04 \x01(\x04\x12\x10\n\x08rx_bytes\x18\x05 \x01(\x04\"c\n\tVlanStats\x12\x11\n\tdevice_id\x18\x01 \x01(\t\x12\x0c\n\x04vlan\x18\x02 \x01(\r\x12\x11\n\ttimestamp\x18\x03 \x01(\r\x12\x10\n\x08tx_bytes\x18\x04 \x01(\x04\x12\x10\n\x08rx_bytes\x18\x05 \x01(\x04\"d\n\tSsidStats\x12\x11\n\tdevice_id\x18\x01 \x01(\t\x12\r\n\x05\x65ssid\x18\x02 \x01(\x0c\x12\x11\n\ttimestamp\x18\x03 \x01(\r\x12\x10\n\x08tx_bytes\x18\x04 \x01(\x04\x12\x10\n\x08rx_bytes\x18\x05 \x01(\x04\"\xe1\x01\n\x12TunnelIpProbeStats\x12\x11\n\tdevice_id\x18\x01 \x01(\t\x12-\n\x0ctunnel_index\x18\x02 \x01(\x0e\x32\x17.Monitoring.TunnelIndex\x12,\n\rprobe_ip_addr\x18\x03 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12\x14\n\x0cprobe_status\x18\x04 \x01(\r\x12\x1d\n\x15ip_probe_pkt_loss_pct\x18\x05 \x01(\r\x12\x13\n\x0btunnel_name\x18\x06 \x01(\t\x12\x11\n\ttunnel_id\x18\x11 \x01(\x04\"\xdf\x05\n\x12UplinkIpProbeStats\x12\x11\n\tdevice_id\x18\x01 \x01(\t\x12\x0f\n\x07link_id\x18\x02 \x01(\r\x12\x11\n\ttimestamp\x18\x03 \x01(\r\x12)\n\nip_address\x18\x04 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12\x0c\n\x04vlan\x18\x05 \x01(\r\x12\x0f\n\x07\x61vg_rtt\x18\x06 \x01(\x04\x12\x0f\n\x07max_rtt\x18\x07 \x01(\x04\x12\x0f\n\x07min_rtt\x18\x08 \x01(\x04\x12\x12\n\navg_jitter\x18\t \x01(\x04\x12\x12\n\nmax_jitter\x18\n \x01(\x04\x12\x12\n\nmin_jitter\x18\x0b \x01(\x04\x12\x13\n\x0bmos_quality\x18\x0c \x01(\x04\x12\x16\n\x0esd_avg_latency\x18\r \x01(\x04\x12\x16\n\x0e\x64s_avg_latency\x18\x0e \x01(\x04\x12\x15\n\rsd_avg_jitter\x18\x0f \x01(\x04\x12\x15\n\rds_avg_jitter\x18\x10 \x01(\x04\x12\x14\n\x0cprobe_status\x18\x11 \x01(\r\x12\x10\n\x08loss_pct\x18\x12 \x01(\r\x12\x14\n\x0cvpnc_ip_addr\x18\x13 \x01(\x04\x12\x15\n\rprobe_ip_addr\x18\x14 \x01(\x04\x12\x15\n\ravg_rtt_float\x18\x15 \x01(\x02\x12\x15\n\rmax_rtt_float\x18\x16 \x01(\x02\x12\x15\n\rmin_rtt_float\x18\x17 \x01(\x02\x12\x18\n\x10\x61vg_jitter_float\x18\x18 \x01(\x02\x12\x18\n\x10max_jitter_float\x18\x19 \x01(\x02\x12\x18\n\x10min_jitter_float\x18\x1a \x01(\x02\x12\x19\n\x11mos_quality_float\x18\x1b \x01(\x02\x12\x1c\n\x14sd_avg_latency_float\x18\x1c \x01(\x02\x12\x1c\n\x14\x64s_avg_latency_float\x18\x1d \x01(\x02\x12\x1b\n\x13sd_avg_jitter_float\x18\x1e \x01(\x02\x12\x1b\n\x13\x64s_avg_jitter_float\x18\x1f \x01(\x02\"\xe3\x01\n\x0fUplinkSpeedtest\x12\x11\n\tdevice_id\x18\x01 \x01(\t\x12(\n\tserver_ip\x18\x02 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12\x0c\n\x04vlan\x18\x03 \x01(\r\x12\x10\n\x08protocol\x18\x04 \x01(\t\x12\x14\n\x0cupstream_bps\x18\x05 \x01(\x04\x12\x16\n\x0e\x64ownstream_bps\x18\x06 \x01(\x04\x12\x11\n\ttime_secs\x18\x07 \x01(\r\x12\x17\n\x0fupstream_jitter\x18\x08 \x01(\x02\x12\x19\n\x11\x64ownstream_jitter\x18\t \x01(\x02\"\x92\x0e\n\tWIDSEvent\x12*\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x12.Monitoring.Action:\x06UPDATE\x12\x33\n\nevent_type\x18\x02 \x01(\x0e\x32\x1f.Monitoring.WIDSEvent.EventType\x12\'\n\x07macaddr\x18\x03 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12\x13\n\x0b\x64\x65tected_ap\x18\x04 \x01(\t\x12\x35\n\x0b\x61ttack_type\x18\x05 \x01(\x0e\x32 .Monitoring.WIDSEvent.AttackType\x12\x0f\n\x07\x63hannel\x18\x06 \x01(\t\x12\x0f\n\x07network\x18\x07 \x01(\x0c\"U\n\tEventType\x12\t\n\x05ROGUE\x10\x01\x12\x0f\n\x0bINTERFERING\x10\x02\x12\x19\n\x15INFRASTRUCTURE_ATTACK\x10\x03\x12\x11\n\rCLIENT_ATTACK\x10\x04\"\xb5\x0b\n\nAttackType\x12\x1c\n\x18\x44\x45TECT_VALID_SSID_MISUSE\x10\x01\x12\x18\n\x14\x44\x45TECT_ADHOC_NETWORK\x10\x02\x12\x13\n\x0f\x44\x45TECT_AP_FLOOD\x10\x03\x12\x1a\n\x16\x44\x45TECT_WIRELESS_BRIDGE\x10\x04\x12\x1d\n\x19\x44\x45TECT_INVALID_MAC_OUI_AP\x10\x05\x12\x1e\n\x1a\x44\x45TECT_INVALID_MAC_OUI_STA\x10\x06\x12\x12\n\x0e\x44\x45TECT_BAD_WEP\x10\x07\x12\x1b\n\x17\x44\x45TECT_AP_IMPERSONATION\x10\x08\x12\x19\n\x15\x44\x45TECT_WINDOWS_BRIDGE\x10\t\x12!\n\x1dSIGNATURE_DEAUTH_BROADCAST_AP\x10\n\x12\"\n\x1eSIGNATURE_DEAUTH_BROADCAST_STA\x10\x0b\x12\x18\n\x14\x44\x45TECT_HT_GREENFIELD\x10\x0c\x12\"\n\x1e\x44\x45TECT_HT_40MHZ_INTOLERANCE_AP\x10\r\x12#\n\x1f\x44\x45TECT_HT_40MHZ_INTOLERANCE_STA\x10\x0e\x12\x17\n\x13\x44\x45TECT_CLIENT_FLOOD\x10\x0f\x12!\n\x1d\x44\x45TECT_ADHOC_USING_VALID_SSID\x10\x10\x12\x16\n\x12\x44\x45TECT_AP_SPOOFING\x10\x11\x12%\n!DETECT_INVALID_ADDRESSCOMBINATION\x10\x12\x12\x19\n\x15\x44\x45TECT_MALFORMED_HTIE\x10\x13\x12\x1e\n\x1a\x44\x45TECT_MALFORMED_ASSOC_REQ\x10\x14\x12\x16\n\x12\x44\x45TECT_OVERFLOW_IE\x10\x15\x12\x1d\n\x19\x44\x45TECT_OVERFLOW_EAPOL_KEY\x10\x16\x12#\n\x1f\x44\x45TECT_MALFORMED_LARGE_DURATION\x10\x17\x12(\n$DETECT_MALFORMED_FRAME_WRONG_CHANNEL\x10\x18\x12\x1f\n\x1b\x44\x45TECT_MALFORMED_FRAME_AUTH\x10\x19\x12\x1b\n\x17\x44\x45TECT_CTS_RATE_ANOMALY\x10\x1a\x12\x1b\n\x17\x44\x45TECT_RTS_RATE_ANOMALY\x10\x1b\x12\x1e\n\x1aSIGNATURE_DEAUTH_BROADCAST\x10\x1c\x12%\n!SIGNATURE_DEASSOCIATION_BROADCAST\x10\x1d\x12\x1f\n\x1b\x44\x45TECT_RATE_ANOMALIES_BY_AP\x10\x1e\x12 \n\x1c\x44\x45TECT_RATE_ANOMALIES_BY_STA\x10\x1f\x12\x1b\n\x17\x44\x45TECT_EAP_RATE_ANOMALY\x10 \x12\x19\n\x15\x44\x45TECT_DISCONNECT_STA\x10!\x12\x1c\n\x18SIGNATURE_ASLEAP_FROM_AP\x10\"\x12\x1d\n\x19SIGNATURE_ASLEAP_FROM_STA\x10#\x12\x1d\n\x19SIGNATURE_AIRJACK_FROM_AP\x10$\x12\x1e\n\x1aSIGNATURE_AIRJACK_FROM_STA\x10%\x12\'\n#DETECT_STATION_DISCONNECT_ATTACK_AP\x10&\x12\x1c\n\x18\x44\x45TECT_UNENCRYPTED_VALID\x10\'\x12\x18\n\x14\x44\x45TECT_OMERTA_ATTACK\x10(\x12\x1d\n\x19\x44\x45TECT_TKIP_REPLAY_ATTACK\x10)\x12\x1a\n\x16\x44\x45TECT_CHOPCHOP_ATTACK\x10*\x12\x13\n\x0f\x44\x45TECT_FATAJACK\x10+\x12&\n\"DETECT_VALID_CLIENT_MISASSOCIATION\x10,\x12\x1b\n\x17\x44\x45TECT_BLOCK_ACK_ATTACK\x10-\x12\x1c\n\x18\x44\x45TECT_HOTSPOTTER_ATTACK\x10.\x12 \n\x1c\x44\x45TECT_POWER_SAVE_DOS_ATTACK\x10/\"\xdd\x05\n\x13\x41irMonitorRogueInfo\x12\x46\n\nmatch_type\x18\x01 \x01(\x0e\x32\x32.Monitoring.AirMonitorRogueInfo.wms_rap_match_type\x12)\n\tmatch_mac\x18\x02 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12\'\n\x08match_ip\x18\x03 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12\x14\n\x0cmonitor_name\x18\x04 \x01(\t\x12N\n\x0enat_match_type\x18\x05 \x01(\x0e\x32\x36.Monitoring.AirMonitorRogueInfo.wms_rap_nat_match_type\"\xc6\x02\n\x12wms_rap_match_type\x12\x0f\n\x0bRAP_MT_NONE\x10\x00\x12\x11\n\rRAP_MT_CFG_WM\x10\x01\x12\x11\n\rRAP_MT_ETH_WM\x10\x02\x12\x10\n\x0cRAP_MT_AP_WM\x10\x03\x12\x11\n\rRAP_MT_EXT_WM\x10\x04\x12\x11\n\rRAP_MT_MANUAL\x10\x05\x12\x15\n\x11RAP_MT_BASE_BSSID\x10\x06\x12\x0e\n\nRAP_MT_EMS\x10\x07\x12\x14\n\x10RAP_MT_ETH_GW_WM\x10\x08\x12\x14\n\x10RAP_MT_CLASS_OFF\x10\t\x12\x13\n\x0fRAP_MT_AP_BSSID\x10\n\x12\x16\n\x12RAP_MT_PROP_ETH_WM\x10\x0b\x12\x12\n\x0eRAP_MT_AP_RULE\x10\x0c\x12\x14\n\x10RAP_MT_SYSTEM_WM\x10\r\x12\x17\n\x13RAP_MT_SYSTEM_GW_WM\x10\x0e\"{\n\x16wms_rap_nat_match_type\x12\x10\n\x0cRAP_NMT_NONE\x10\x00\x12\x11\n\rRAP_NMT_EQUAL\x10\x01\x12\x14\n\x10RAP_NMT_PLUS_ONE\x10\x02\x12\x15\n\x11RAP_NMT_MINUS_ONE\x10\x03\x12\x0f\n\x0bRAP_NMT_OUI\x10\x04\"\x93\x03\n\nRogueEvent\x12\'\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x12.Monitoring.Action:\x03\x41\x44\x44\x12\x13\n\x0b\x64\x65tected_ap\x18\x02 \x01(\t\x12\'\n\x07macaddr\x18\x03 \x01(\x0b\x32\x16.Monitoring.MacAddress\x12\x0f\n\x07\x63hannel\x18\x04 \x01(\r\x12\x0f\n\x07network\x18\x05 \x01(\x0c\x12@\n\tencr_type\x18\x06 \x01(\x0e\x32-.Monitoring.RogueEvent.wms_snmp_encr_protocol\x12\x31\n\x08\x61m_rogue\x18\x07 \x01(\x0b\x32\x1f.Monitoring.AirMonitorRogueInfo\"\x86\x01\n\x16wms_snmp_encr_protocol\x12\x1a\n\x16WMS_SNMP_WPA_ENCR_OPEN\x10\x00\x12\x19\n\x15WMS_SNMP_WPA_ENCR_WEP\x10\x01\x12\x19\n\x15WMS_SNMP_WPA_ENCR_WPA\x10\x02\x12\x1a\n\x16WMS_SNMP_WPA_ENCR_WPA2\x10\x03\"\xbb\x01\n\x10\x44\x65viceNeighbours\x12*\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x12.Monitoring.Action:\x06UPDATE\x12\x11\n\tdevice_id\x18\x02 \x01(\t\x12\x0c\n\x04port\x18\x03 \x01(\t\x12\x18\n\x10remote_device_id\x18\x04 \x01(\t\x12\x13\n\x0bremote_port\x18\x05 \x01(\t\x12\x1a\n\x12remote_port_number\x18\x06 \x01(\t\x12\x0f\n\x07vlan_id\x18\x07 \x01(\t\"\xc9\r\n\x15MonitoringInformation\x12\x13\n\x0b\x63ustomer_id\x18\x01 \x02(\t\x12.\n\rdata_elements\x18\x02 \x03(\x0e\x32\x17.Monitoring.DataElement\x12!\n\x06swarms\x18\x03 \x03(\x0b\x32\x11.Monitoring.Swarm\x12\x1b\n\x03\x61ps\x18\x04 \x03(\x0b\x32\x0e.Monitoring.Ap\x12%\n\x08networks\x18\x05 \x03(\x0b\x32\x13.Monitoring.Network\x12!\n\x06radios\x18\x06 \x03(\x0b\x32\x11.Monitoring.Radio\x12!\n\x04vaps\x18\x07 \x03(\x0b\x32\x13.Monitoring.VapInfo\x12)\n\ninterfaces\x18\x08 \x03(\x0b\x32\x15.Monitoring.Interface\x12#\n\x07tunnels\x18\t \x03(\x0b\x32\x12.Monitoring.Tunnel\x12\x34\n\x10wireless_clients\x18\n \x03(\x0b\x32\x1a.Monitoring.WirelessClient\x12$\n\x08switches\x18\x0b \x03(\x0b\x32\x12.Monitoring.Switch\x12.\n\rwired_clients\x18\x0c \x03(\x0b\x32\x17.Monitoring.WiredClient\x12-\n\x0c\x64\x65vice_stats\x18\r \x03(\x0b\x32\x17.Monitoring.DeviceStats\x12+\n\x0bradio_stats\x18\x0e \x03(\x0b\x32\x16.Monitoring.RadioStats\x12\x33\n\x0finterface_stats\x18\x0f \x03(\x0b\x32\x1a.Monitoring.InterfaceStats\x12\'\n\tvap_stats\x18\x10 \x03(\x0b\x32\x14.Monitoring.VapStats\x12-\n\x0c\x63lient_stats\x18\x11 \x03(\x0b\x32\x17.Monitoring.ClientStats\x12-\n\x0ctunnel_stats\x18\x12 \x03(\x0b\x32\x17.Monitoring.TunnelStats\x12*\n\x0bwids_events\x18\x13 \x03(\x0b\x32\x15.Monitoring.WIDSEvent\x12+\n\x0bmodem_stats\x18\x14 \x03(\x0b\x32\x16.Monitoring.ModemStats\x12)\n\nrole_stats\x18\x15 \x03(\x0b\x32\x15.Monitoring.RoleStats\x12)\n\nvlan_stats\x18\x16 \x03(\x0b\x32\x15.Monitoring.VlanStats\x12)\n\nssid_stats\x18\x17 \x03(\x0b\x32\x15.Monitoring.SsidStats\x12\x35\n\ripprobe_stats\x18\x18 \x03(\x0b\x32\x1e.Monitoring.TunnelIpProbeStats\x12,\n\x0crogue_events\x18\x19 \x03(\x0b\x32\x16.Monitoring.RogueEvent\x12<\n\x14mobility_controllers\x18\x1a \x03(\x0b\x32\x1e.Monitoring.MobilityController\x12#\n\x07uplinks\x18\x1b \x03(\x0b\x32\x12.Monitoring.Uplink\x12-\n\x0cuplink_stats\x18\x1c \x03(\x0b\x32\x17.Monitoring.UplinkStats\x12\x34\n\x10uplink_wan_stats\x18\x1d \x03(\x0b\x32\x1a.Monitoring.UplinkWanStats\x12:\n\x12uplink_probe_stats\x18\x1e \x03(\x0b\x32\x1e.Monitoring.UplinkIpProbeStats\x12\x35\n\x10uplink_speedtest\x18\x1f \x03(\x0b\x32\x1b.Monitoring.UplinkSpeedtest\x12\x37\n\x11\x64\x65vice_neighbours\x18 \x03(\x0b\x32\x1c.Monitoring.DeviceNeighbours\x12.\n\x0cnotification\x18! \x03(\x0b\x32\x18.Monitoring.Notification\x12.\n\rswitch_stacks\x18\" \x03(\x0b\x32\x17.Monitoring.SwitchStack\x12*\n\x0bike_tunnels\x18# \x03(\x0b\x32\x15.Monitoring.IkeTunnel\x12\x34\n\x10switch_vlan_info\x18$ \x01(\x0b\x32\x1a.Monitoring.SwitchVlanInfo\x12\x1f\n\x05vlans\x18% \x03(\x0b\x32\x10.Monitoring.Vlan\x12!\n\x03vsx\x18& \x01(\x0b\x32\x14.Monitoring.VSXState\x12\x11\n\ttimestamp\x18\' \x01(\r\"\xbc\x05\n\x1aMonitoringStateInformation\x12\x13\n\x0b\x63ustomer_id\x18\x01 \x02(\t\x12<\n\x14mobility_controllers\x18\x02 \x03(\x0b\x32\x1e.Monitoring.MobilityController\x12$\n\x08switches\x18\x03 \x03(\x0b\x32\x12.Monitoring.Switch\x12!\n\x06swarms\x18\x04 \x03(\x0b\x32\x11.Monitoring.Swarm\x12\x1b\n\x03\x61ps\x18\x05 \x03(\x0b\x32\x0e.Monitoring.Ap\x12!\n\x04vaps\x18\x06 \x03(\x0b\x32\x13.Monitoring.VapInfo\x12!\n\x06radios\x18\x07 \x03(\x0b\x32\x11.Monitoring.Radio\x12)\n\ninterfaces\x18\x08 \x03(\x0b\x32\x15.Monitoring.Interface\x12%\n\x08networks\x18\t \x03(\x0b\x32\x13.Monitoring.Network\x12#\n\x07tunnels\x18\n \x03(\x0b\x32\x12.Monitoring.Tunnel\x12\x34\n\x10wireless_clients\x18\x0b \x03(\x0b\x32\x1a.Monitoring.WirelessClient\x12.\n\rwired_clients\x18\x0c \x03(\x0b\x32\x17.Monitoring.WiredClient\x12#\n\x07uplinks\x18\r \x03(\x0b\x32\x12.Monitoring.Uplink\x12.\n\rswitch_stacks\x18\x0e \x03(\x0b\x32\x17.Monitoring.SwitchStack\x12*\n\x0bike_tunnels\x18\x0f \x03(\x0b\x32\x15.Monitoring.IkeTunnel\x12.\n\rdata_elements\x18\x10 \x03(\x0e\x32\x17.Monitoring.DataElement\x12\x11\n\ttimestamp\x18\x11 \x01(\r\"*\n\x0cKeyValueData\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\x83\x03\n\x0cNotification\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x12\n\nsetting_id\x18\x03 \x01(\t\x12\x11\n\tdevice_id\x18\x04 \x01(\t\x12\x33\n\x08severity\x18\x05 \x01(\x0e\x32!.Monitoring.Notification.Severity\x12\x11\n\ttimestamp\x18\x06 \x01(\r\x12\x39\n\x05state\x18\x07 \x01(\x0e\x32*.Monitoring.Notification.NotificationState\x12\x13\n\x0b\x64\x65scription\x18\x08 \x01(\t\x12\'\n\x05\x65xtra\x18\t \x03(\x0b\x32\x18.Monitoring.KeyValueData\"G\n\x08Severity\x12\n\n\x06Normal\x10\x01\x12\x0b\n\x07Warning\x10\x02\x12\t\n\x05Minor\x10\x03\x12\t\n\x05Major\x10\x04\x12\x0c\n\x08\x43ritical\x10\x05\"(\n\x11NotificationState\x12\x08\n\x04Open\x10\x00\x12\t\n\x05\x43lose\x10\x01\"J\n\x0eSwitchVlanInfo\x12\x11\n\tdevice_id\x18\x01 \x02(\t\x12%\n\x05vlans\x18\x02 \x03(\x0b\x32\x16.Monitoring.SwitchVlan\"\xbc\x04\n\nSwitchVlan\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x14\n\x0ctagged_ports\x18\x03 \x03(\t\x12\x16\n\x0euntagged_ports\x18\x04 \x03(\t\x12\x17\n\x0fprimary_vlan_id\x18\x05 \x01(\r\x12\x19\n\x11primary_vlan_type\x18\x06 \x01(\t\x12\x19\n\x11promiscuous_ports\x18\x07 \x03(\t\x12\x11\n\tisl_ports\x18\x08 \x03(\t\x12\x1a\n\x12is_management_vlan\x18\t \x01(\x08\x12\x18\n\x10is_voice_enabled\x18\n \x01(\x08\x12\x18\n\x10is_jumbo_enabled\x18\x0b \x01(\x08\x12\x17\n\x0fis_igmp_enabled\x18\x0c \x01(\x08\x12(\n\tipaddress\x18\r \x01(\x0b\x32\x15.Monitoring.IpAddress\x12\x31\n\x06status\x18\x0e \x01(\x0e\x32!.Monitoring.SwitchVlan.VlanStatus\x12\x19\n\x11oper_state_reason\x18\x0f \x01(\t\x12-\n\x04type\x18\x10 \x01(\x0e\x32\x1f.Monitoring.SwitchVlan.VlanType\x12\x14\n\x0c\x61\x63\x63\x65ss_ports\x18\x11 \x03(\t\"\x1e\n\nVlanStatus\x12\x06\n\x02UP\x10\x01\x12\x08\n\x04\x44OWN\x10\x02\">\n\x08VlanType\x12\n\n\x06STATIC\x10\x01\x12\x0b\n\x07\x44YNAMIC\x10\x02\x12\x0c\n\x08INTERNAL\x10\x03\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x04\"\xa4\x03\n\x04Vlan\x12*\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x12.Monitoring.Action:\x06UPDATE\x12\x0f\n\x07vlan_id\x18\x02 \x01(\r\x12#\n\x04ipv4\x18\x03 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12&\n\x07ipv6_ll\x18\x04 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12%\n\x06ipv6_1\x18\x05 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12%\n\x06ipv6_2\x18\x06 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12%\n\x06ipv6_3\x18\x07 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12&\n\noper_state\x18\x08 \x01(\x0e\x32\x12.Monitoring.Status\x12\x13\n\x0b\x64\x65scription\x18\t \x01(\t\x12\'\n\x0b\x61\x64min_state\x18\n \x01(\x0e\x32\x12.Monitoring.Status\x12\x11\n\taddr_mode\x18\x0b \x01(\t\x12\x11\n\ttimestamp\x18\x0c \x01(\r\x12\x11\n\tdevice_id\x18\r \x01(\t\"\xf6\n\n\x08VSXState\x12*\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x12.Monitoring.Action:\x06UPDATE\x12\x11\n\tdevice_id\x18\x02 \x01(\t\x12-\n\x04role\x18\x03 \x01(\x0e\x32\x1f.Monitoring.VSXState.DeviceRole\x12\x32\n\tpeer_role\x18\x04 \x01(\x0e\x32\x1f.Monitoring.VSXState.DeviceRole\x12\x10\n\x08isl_port\x18\x05 \x01(\t\x12\x15\n\rpeer_isl_port\x18\x06 \x01(\t\x12\x30\n\x11keepalive_peer_ip\x18\x07 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12/\n\x10keepalive_src_ip\x18\x08 \x01(\x0b\x32\x15.Monitoring.IpAddress\x12\x1b\n\x13last_sync_timestamp\x18\t \x01(\x04\x12#\n\x03mac\x18\n \x01(\x0b\x32\x16.Monitoring.MacAddress\x12(\n\x08peer_mac\x18\x0b \x01(\x0b\x32\x16.Monitoring.MacAddress\x12\x1b\n\x13\x63onfig_sync_disable\x18\x0c \x01(\x08\x12\x45\n\x17islp_device_state_value\x18\r \x01(\x0e\x32$.Monitoring.VSXState.ISLPDeviceState\x12>\n\x17\x63onfig_sync_state_value\x18\x0e \x01(\x0e\x32\x1d.Monitoring.VSXState.ISLState\x12;\n\x14isl_mgmt_state_value\x18\x0f \x01(\x0e\x32\x1d.Monitoring.VSXState.ISLState\x12\x36\n\x0fnae_state_value\x18\x10 \x01(\x0e\x32\x1d.Monitoring.VSXState.ISLState\x12?\n\x18https_server_state_value\x18\x11 \x01(\x0e\x32\x1d.Monitoring.VSXState.ISLState\"(\n\nDeviceRole\x12\x0b\n\x07PRIMARY\x10\x01\x12\r\n\tSECONDARY\x10\x02\"\xba\x01\n\x0fISLPDeviceState\x12\x14\n\x10WAITING_FOR_PEER\x10\x01\x12\x14\n\x10PEER_ESTABLISHED\x10\x02\x12\x18\n\x14SPLIT_SYSTEM_PRIMARY\x10\x03\x12\x1a\n\x16SPLIT_SYSTEM_SECONDARY\x10\x04\x12\x10\n\x0cSYNC_PRIMARY\x10\x05\x12\x12\n\x0eSYNC_SECONDARY\x10\x06\x12\x1f\n\x1bSYNC_SECONDARY_LINKUP_DELAY\x10\x07\"\x8e\x03\n\x08ISLState\x12\x0b\n\x07IN_SYNC\x10\x01\x12\x0c\n\x08\x44ISABLED\x10\x02\x12#\n\x1fSW_IMAGE_VERSION_MISMATCH_ERROR\x10\x03\x12$\n CONFLICTING_OR_MISSING_DEV_ROLES\x10\x04\x12\x1c\n\x18PEER_DB_CONNECTION_ERROR\x10\x05\x12\x1f\n\x1b\x43ONFIGURATION_SYNC_CONFLICT\x10\x06\x12(\n$CONFIGURATION_SYNC_MISSING_REFERENCE\x10\x07\x12\x12\n\x0ePEER_REACHABLE\x10\x08\x12\x14\n\x10PEER_UNREACHABLE\x10\t\x12\x0f\n\x0bOPERATIONAL\x10\n\x12\x1f\n\x1bINTER_SWITCH_LINK_MGMT_INIT\x10\x0b\x12\'\n#CONFLICTING_OR_MISSING_DEVICE_ROLES\x10\x0c\x12\x1a\n\x16INTER_SWITCH_LINK_DOWN\x10\r\x12\x12\n\x0eINTERNAL_ERROR\x10\x0e*)\n\x06\x41\x63tion\x12\x07\n\x03\x41\x44\x44\x10\x01\x12\n\n\x06\x44\x45LETE\x10\x02\x12\n\n\x06UPDATE\x10\x03*\x1a\n\x06Status\x12\x06\n\x02UP\x10\x01\x12\x08\n\x04\x44OWN\x10\x02*&\n\x0bTunnelIndex\x12\x0b\n\x07PRIMARY\x10\x00\x12\n\n\x06\x42\x41\x43KUP\x10\x01*\"\n\nCryptoType\x12\x0b\n\x07\x43\x41_CERT\x10\x00\x12\x07\n\x03PSK\x10\x01*\xa3\x05\n\x0b\x44\x61taElement\x12\x14\n\x10STATE_CONTROLLER\x10\x01\x12\x10\n\x0cSTATE_SWITCH\x10\x02\x12\x0f\n\x0bSTATE_SWARM\x10\x03\x12\x0c\n\x08STATE_AP\x10\x04\x12\r\n\tSTATE_VAP\x10\x05\x12\x0f\n\x0bSTATE_RADIO\x10\x06\x12\x13\n\x0fSTATE_INTERFACE\x10\x07\x12\x11\n\rSTATE_NETWORK\x10\x08\x12\x10\n\x0cSTATE_TUNNEL\x10\t\x12\x18\n\x14STATE_WIRELESSCLIENT\x10\n\x12\x15\n\x11STATE_WIREDCLIENT\x10\x0b\x12\x10\n\x0cSTATE_UPLINK\x10\x0c\x12\x0f\n\x0bSTAT_DEVICE\x10\r\x12\x0e\n\nSTAT_RADIO\x10\x0e\x12\x0c\n\x08STAT_VAP\x10\x0f\x12\x12\n\x0eSTAT_INTERFACE\x10\x10\x12\x0f\n\x0bSTAT_CLIENT\x10\x11\x12\x0f\n\x0bSTAT_TUNNEL\x10\x12\x12\x0e\n\nSTAT_MODEM\x10\x13\x12\r\n\tSTAT_ROLE\x10\x14\x12\r\n\tSTAT_VLAN\x10\x15\x12\r\n\tSTAT_SSID\x10\x16\x12\x10\n\x0cSTAT_IPPROBE\x10\x17\x12\x0f\n\x0bSTAT_UPLINK\x10\x18\x12\x12\n\x0eSTAT_UPLINKWAN\x10\x19\x12\x16\n\x12STAT_UPLINKIPPROBE\x10\x1a\x12\x0f\n\x0b\x45VENTS_WIDS\x10\x1b\x12\x10\n\x0c\x45VENTS_ROGUE\x10\x1c\x12\x1a\n\x16STATS_UPLINK_SPEEDTEST\x10\x1d\x12\x15\n\x11\x44\x45VICE_NEIGHBOURS\x10\x1e\x12\x11\n\rNOTIFICATIONS\x10\x1f\x12\x10\n\x0cSWITCH_STACK\x10 \x12\x14\n\x10STATE_IKE_TUNNEL\x10!\x12\x0f\n\x0bSWITCH_VLAN\x10\"\x12\x0e\n\nSTATE_VLAN\x10#\x12\r\n\tSTATE_VSX\x10$*\xb0\x06\n\x08\x41uthType\x12\x08\n\x04NONE\x10\x01\x12\x0c\n\x08MAC_AUTH\x10\x02\x12\x0e\n\nDOT1X_AUTH\x10\x03\x12\x0b\n\x07L3_AUTH\x10\x04\x12\x10\n\x0c\x43ONSOLE_AUTH\x10\x05\x12\x0f\n\x0bTELNET_AUTH\x10\x06\x12\x0e\n\nWEBUI_AUTH\x10\x07\x12\x0c\n\x08SSH_AUTH\x10\x08\x12\x0c\n\x08WEB_AUTH\x10\t\x12\r\n\tSNMP_AUTH\x10\n\x12\x11\n\rSSH_NONE_AUTH\x10\x0b\x12\x0c\n\x08LMA_AUTH\x10\x0c\x12\x0c\n\x08\x41NY_AUTH\x10\r\x12\x12\n\x0e\x43\x41PTIVE_PORTAL\x10\x0e\x12\x0c\n\x08VPN_AUTH\x10\x0f\x12\x15\n\x11STATEFUL_KERBEROS\x10\x10\x12\x15\n\x11RADIUS_ACCOUNTING\x10\x11\x12\r\n\tSECURE_ID\x10\x12\x12\x13\n\x0fSTATEFUL_RADIUS\x10\x13\x12\x15\n\x11SWITCH_MANAGEMENT\x10\x14\x12\x11\n\rDOT1X_MACHINE\x10\x15\x12\x0e\n\nDOT1X_USER\x10\x16\x12\x0f\n\x0b\x44OT1X_WIRED\x10\x17\x12\x17\n\x13\x44OT1X_WIRED_MACHINE\x10\x18\x12\x14\n\x10\x44OT1X_WIRED_USER\x10\x19\x12\x0e\n\nPUB_COOKIE\x10\x1a\x12\x10\n\x0cTACACAS_PLUS\x10\x1b\x12\x11\n\rWIRELESS_XSEC\x10\x1c\x12\x19\n\x15WIRELESS_XSEC_MACHINE\x10\x1d\x12\x16\n\x12WIRELESS_XSEC_USER\x10\x1e\x12\x17\n\x13WIRELESS_XSEC_WIRED\x10\x1f\x12\x1f\n\x1bWIRELESS_XSEC_WIRED_MACHINE\x10 \x12\x1c\n\x18WIRELESS_XSEC_WIRED_USER\x10!\x12\x11\n\rSTATEFUL_NTLM\x10\"\x12\n\n\x06RAP_AP\x10#\x12\x0b\n\x07VIA_WEB\x10$\x12\x1a\n\x16GENERIC_INTERFACE_SPEC\x10%\x12\x11\n\rTRANSPORT_VPN\x10&\x12\x0b\n\x07VIA_VPN\x10\'\x12\x0e\n\nPUTN_DOT1X\x10(\x12\x0c\n\x08PUTN_MAC\x10)\x12\x0b\n\x07PUTN_CP\x10*\x12\x0c\n\x08PUTN_LMA\x10+\x12\x13\n\x0fNUM_AUTH_CLIENT\x10,')

@@ -35,154 +33,154 @@

DESCRIPTOR._loaded_options = None
_globals['_ACTION']._serialized_start=19193
_globals['_ACTION']._serialized_end=19234
_globals['_STATUS']._serialized_start=19236
_globals['_STATUS']._serialized_end=19262
_globals['_TUNNELINDEX']._serialized_start=19264
_globals['_TUNNELINDEX']._serialized_end=19302
_globals['_CRYPTOTYPE']._serialized_start=19304
_globals['_CRYPTOTYPE']._serialized_end=19338
_globals['_DATAELEMENT']._serialized_start=19341
_globals['_DATAELEMENT']._serialized_end=20016
_globals['_AUTHTYPE']._serialized_start=20019
_globals['_AUTHTYPE']._serialized_end=20835
_globals['_IPADDRESS']._serialized_start=33
_globals['_IPADDRESS']._serialized_end=165
_globals['_IPADDRESS_ADDR_FAMILY']._serialized_start=107
_globals['_IPADDRESS_ADDR_FAMILY']._serialized_end=165
_globals['_MACADDRESS']._serialized_start=167
_globals['_MACADDRESS']._serialized_end=193
_globals['_SWARM']._serialized_start=196
_globals['_SWARM']._serialized_end=438
_globals['_TUNNEL']._serialized_start=441
_globals['_TUNNEL']._serialized_end=792
_globals['_INTERFACE']._serialized_start=795
_globals['_INTERFACE']._serialized_end=2652
_globals['_INTERFACE_DUPLEX']._serialized_start=1680
_globals['_INTERFACE_DUPLEX']._serialized_end=1718
_globals['_INTERFACE_INTFTYPE']._serialized_start=1721
_globals['_INTERFACE_INTFTYPE']._serialized_end=1866
_globals['_INTERFACE_SPEEDTYPE']._serialized_start=1868
_globals['_INTERFACE_SPEEDTYPE']._serialized_end=1976
_globals['_INTERFACE_PORTTYPE']._serialized_start=1978
_globals['_INTERFACE_PORTTYPE']._serialized_end=2052
_globals['_INTERFACE_POESUPPORT']._serialized_start=2054
_globals['_INTERFACE_POESUPPORT']._serialized_end=2108
_globals['_INTERFACE_STATEDOWNREASON']._serialized_start=2111
_globals['_INTERFACE_STATEDOWNREASON']._serialized_end=2587
_globals['_INTERFACE_VLANMODES']._serialized_start=2589
_globals['_INTERFACE_VLANMODES']._serialized_end=2652
_globals['_VAPINFO']._serialized_start=2655
_globals['_VAPINFO']._serialized_end=2864
_globals['_RADIO']._serialized_start=2867
_globals['_RADIO']._serialized_end=3127
_globals['_AP']._serialized_start=3130
_globals['_AP']._serialized_end=3583
_globals['_AP_UPLINKTYPE']._serialized_start=3523
_globals['_AP_UPLINKTYPE']._serialized_end=3583
_globals['_NETWORK']._serialized_start=3585
_globals['_NETWORK']._serialized_end=3703
_globals['_WIRELESSCLIENT']._serialized_start=3706
_globals['_WIRELESSCLIENT']._serialized_end=4079
_globals['_HARDWAREMODULE']._serialized_start=4082
_globals['_HARDWAREMODULE']._serialized_end=4266
_globals['_HARDWAREMODULE_HARDWARESTATUS']._serialized_start=4174
_globals['_HARDWAREMODULE_HARDWARESTATUS']._serialized_end=4266
_globals['_SWITCH']._serialized_start=4269
_globals['_SWITCH']._serialized_end=5029
_globals['_SWITCH_STACKMEMBERROLE']._serialized_start=4959
_globals['_SWITCH_STACKMEMBERROLE']._serialized_end=5029
_globals['_SWITCHSTACK']._serialized_start=5032
_globals['_SWITCHSTACK']._serialized_end=5508
_globals['_SWITCHSTACK_STACKTOPOLOGY']._serialized_start=5308
_globals['_SWITCHSTACK_STACKTOPOLOGY']._serialized_end=5401
_globals['_SWITCHSTACK_STACKPOLICY']._serialized_start=5403
_globals['_SWITCHSTACK_STACKPOLICY']._serialized_end=5508
_globals['_WIREDCLIENT']._serialized_start=5511
_globals['_WIREDCLIENT']._serialized_end=5832
_globals['_MOBILITYCONTROLLER']._serialized_start=5835
_globals['_MOBILITYCONTROLLER']._serialized_end=6294
_globals['_MOBILITYCONTROLLER_CONTROLLERMODE']._serialized_start=6255
_globals['_MOBILITYCONTROLLER_CONTROLLERMODE']._serialized_end=6294
_globals['_UPLINK']._serialized_start=6297
_globals['_UPLINK']._serialized_end=6658
_globals['_IKETUNNEL']._serialized_start=6661
_globals['_IKETUNNEL']._serialized_end=6968
_globals['_DEVICESTATS']._serialized_start=6971
_globals['_DEVICESTATS']._serialized_end=7296
_globals['_RADIOSTATS']._serialized_start=7299
_globals['_RADIOSTATS']._serialized_end=7520
_globals['_VAPSTATS']._serialized_start=7523
_globals['_VAPSTATS']._serialized_end=7667
_globals['_TUNNELSTATS']._serialized_start=7670
_globals['_TUNNELSTATS']._serialized_end=7855
_globals['_CLIENTSTATS']._serialized_start=7858
_globals['_CLIENTSTATS']._serialized_end=8076
_globals['_INTERFACESTATS']._serialized_start=8079
_globals['_INTERFACESTATS']._serialized_end=8759
_globals['_UPLINKSTATS']._serialized_start=8762
_globals['_UPLINKSTATS']._serialized_end=8950
_globals['_UPLINKWANSTATS']._serialized_start=8953
_globals['_UPLINKWANSTATS']._serialized_end=9101
_globals['_MODEMSTATS']._serialized_start=9103
_globals['_MODEMSTATS']._serialized_end=9189
_globals['_ROLESTATS']._serialized_start=9191
_globals['_ROLESTATS']._serialized_end=9295
_globals['_VLANSTATS']._serialized_start=9297
_globals['_VLANSTATS']._serialized_end=9396
_globals['_SSIDSTATS']._serialized_start=9398
_globals['_SSIDSTATS']._serialized_end=9498
_globals['_TUNNELIPPROBESTATS']._serialized_start=9501
_globals['_TUNNELIPPROBESTATS']._serialized_end=9726
_globals['_UPLINKIPPROBESTATS']._serialized_start=9729
_globals['_UPLINKIPPROBESTATS']._serialized_end=10464
_globals['_UPLINKSPEEDTEST']._serialized_start=10467
_globals['_UPLINKSPEEDTEST']._serialized_end=10694
_globals['_WIDSEVENT']._serialized_start=10697
_globals['_WIDSEVENT']._serialized_end=12507
_globals['_WIDSEVENT_EVENTTYPE']._serialized_start=10958
_globals['_WIDSEVENT_EVENTTYPE']._serialized_end=11043
_globals['_WIDSEVENT_ATTACKTYPE']._serialized_start=11046
_globals['_WIDSEVENT_ATTACKTYPE']._serialized_end=12507
_globals['_AIRMONITORROGUEINFO']._serialized_start=12510
_globals['_AIRMONITORROGUEINFO']._serialized_end=13243
_globals['_AIRMONITORROGUEINFO_WMS_RAP_MATCH_TYPE']._serialized_start=12792
_globals['_AIRMONITORROGUEINFO_WMS_RAP_MATCH_TYPE']._serialized_end=13118
_globals['_AIRMONITORROGUEINFO_WMS_RAP_NAT_MATCH_TYPE']._serialized_start=13120
_globals['_AIRMONITORROGUEINFO_WMS_RAP_NAT_MATCH_TYPE']._serialized_end=13243
_globals['_ROGUEEVENT']._serialized_start=13246
_globals['_ROGUEEVENT']._serialized_end=13649
_globals['_ROGUEEVENT_WMS_SNMP_ENCR_PROTOCOL']._serialized_start=13515
_globals['_ROGUEEVENT_WMS_SNMP_ENCR_PROTOCOL']._serialized_end=13649
_globals['_DEVICENEIGHBOURS']._serialized_start=13652
_globals['_DEVICENEIGHBOURS']._serialized_end=13839
_globals['_MONITORINGINFORMATION']._serialized_start=13842
_globals['_MONITORINGINFORMATION']._serialized_end=15579
_globals['_MONITORINGSTATEINFORMATION']._serialized_start=15582
_globals['_MONITORINGSTATEINFORMATION']._serialized_end=16282
_globals['_KEYVALUEDATA']._serialized_start=16284
_globals['_KEYVALUEDATA']._serialized_end=16326
_globals['_NOTIFICATION']._serialized_start=16329
_globals['_NOTIFICATION']._serialized_end=16716
_globals['_NOTIFICATION_SEVERITY']._serialized_start=16603
_globals['_NOTIFICATION_SEVERITY']._serialized_end=16674
_globals['_NOTIFICATION_NOTIFICATIONSTATE']._serialized_start=16676
_globals['_NOTIFICATION_NOTIFICATIONSTATE']._serialized_end=16716
_globals['_SWITCHVLANINFO']._serialized_start=16718
_globals['_SWITCHVLANINFO']._serialized_end=16792
_globals['_SWITCHVLAN']._serialized_start=16795
_globals['_SWITCHVLAN']._serialized_end=17367
_globals['_SWITCHVLAN_VLANSTATUS']._serialized_start=17273
_globals['_SWITCHVLAN_VLANSTATUS']._serialized_end=17303
_globals['_SWITCHVLAN_VLANTYPE']._serialized_start=17305
_globals['_SWITCHVLAN_VLANTYPE']._serialized_end=17367
_globals['_VLAN']._serialized_start=17370
_globals['_VLAN']._serialized_end=17790
_globals['_VSXSTATE']._serialized_start=17793
_globals['_VSXSTATE']._serialized_end=19191
_globals['_VSXSTATE_DEVICEROLE']._serialized_start=18561
_globals['_VSXSTATE_DEVICEROLE']._serialized_end=18601
_globals['_VSXSTATE_ISLPDEVICESTATE']._serialized_start=18604
_globals['_VSXSTATE_ISLPDEVICESTATE']._serialized_end=18790
_globals['_VSXSTATE_ISLSTATE']._serialized_start=18793
_globals['_VSXSTATE_ISLSTATE']._serialized_end=19191
_globals['_ACTION']._serialized_start = 19193
_globals['_ACTION']._serialized_end = 19234
_globals['_STATUS']._serialized_start = 19236
_globals['_STATUS']._serialized_end = 19262
_globals['_TUNNELINDEX']._serialized_start = 19264
_globals['_TUNNELINDEX']._serialized_end = 19302
_globals['_CRYPTOTYPE']._serialized_start = 19304
_globals['_CRYPTOTYPE']._serialized_end = 19338
_globals['_DATAELEMENT']._serialized_start = 19341
_globals['_DATAELEMENT']._serialized_end = 20016
_globals['_AUTHTYPE']._serialized_start = 20019
_globals['_AUTHTYPE']._serialized_end = 20835
_globals['_IPADDRESS']._serialized_start = 33
_globals['_IPADDRESS']._serialized_end = 165
_globals['_IPADDRESS_ADDR_FAMILY']._serialized_start = 107
_globals['_IPADDRESS_ADDR_FAMILY']._serialized_end = 165
_globals['_MACADDRESS']._serialized_start = 167
_globals['_MACADDRESS']._serialized_end = 193
_globals['_SWARM']._serialized_start = 196
_globals['_SWARM']._serialized_end = 438
_globals['_TUNNEL']._serialized_start = 441
_globals['_TUNNEL']._serialized_end = 792
_globals['_INTERFACE']._serialized_start = 795
_globals['_INTERFACE']._serialized_end = 2652
_globals['_INTERFACE_DUPLEX']._serialized_start = 1680
_globals['_INTERFACE_DUPLEX']._serialized_end = 1718
_globals['_INTERFACE_INTFTYPE']._serialized_start = 1721
_globals['_INTERFACE_INTFTYPE']._serialized_end = 1866
_globals['_INTERFACE_SPEEDTYPE']._serialized_start = 1868
_globals['_INTERFACE_SPEEDTYPE']._serialized_end = 1976
_globals['_INTERFACE_PORTTYPE']._serialized_start = 1978
_globals['_INTERFACE_PORTTYPE']._serialized_end = 2052
_globals['_INTERFACE_POESUPPORT']._serialized_start = 2054
_globals['_INTERFACE_POESUPPORT']._serialized_end = 2108
_globals['_INTERFACE_STATEDOWNREASON']._serialized_start = 2111
_globals['_INTERFACE_STATEDOWNREASON']._serialized_end = 2587
_globals['_INTERFACE_VLANMODES']._serialized_start = 2589
_globals['_INTERFACE_VLANMODES']._serialized_end = 2652
_globals['_VAPINFO']._serialized_start = 2655
_globals['_VAPINFO']._serialized_end = 2864
_globals['_RADIO']._serialized_start = 2867
_globals['_RADIO']._serialized_end = 3127
_globals['_AP']._serialized_start = 3130
_globals['_AP']._serialized_end = 3583
_globals['_AP_UPLINKTYPE']._serialized_start = 3523
_globals['_AP_UPLINKTYPE']._serialized_end = 3583
_globals['_NETWORK']._serialized_start = 3585
_globals['_NETWORK']._serialized_end = 3703
_globals['_WIRELESSCLIENT']._serialized_start = 3706
_globals['_WIRELESSCLIENT']._serialized_end = 4079
_globals['_HARDWAREMODULE']._serialized_start = 4082
_globals['_HARDWAREMODULE']._serialized_end = 4266
_globals['_HARDWAREMODULE_HARDWARESTATUS']._serialized_start = 4174
_globals['_HARDWAREMODULE_HARDWARESTATUS']._serialized_end = 4266
_globals['_SWITCH']._serialized_start = 4269
_globals['_SWITCH']._serialized_end = 5029
_globals['_SWITCH_STACKMEMBERROLE']._serialized_start = 4959
_globals['_SWITCH_STACKMEMBERROLE']._serialized_end = 5029
_globals['_SWITCHSTACK']._serialized_start = 5032
_globals['_SWITCHSTACK']._serialized_end = 5508
_globals['_SWITCHSTACK_STACKTOPOLOGY']._serialized_start = 5308
_globals['_SWITCHSTACK_STACKTOPOLOGY']._serialized_end = 5401
_globals['_SWITCHSTACK_STACKPOLICY']._serialized_start = 5403
_globals['_SWITCHSTACK_STACKPOLICY']._serialized_end = 5508
_globals['_WIREDCLIENT']._serialized_start = 5511
_globals['_WIREDCLIENT']._serialized_end = 5832
_globals['_MOBILITYCONTROLLER']._serialized_start = 5835
_globals['_MOBILITYCONTROLLER']._serialized_end = 6294
_globals['_MOBILITYCONTROLLER_CONTROLLERMODE']._serialized_start = 6255
_globals['_MOBILITYCONTROLLER_CONTROLLERMODE']._serialized_end = 6294
_globals['_UPLINK']._serialized_start = 6297
_globals['_UPLINK']._serialized_end = 6658
_globals['_IKETUNNEL']._serialized_start = 6661
_globals['_IKETUNNEL']._serialized_end = 6968
_globals['_DEVICESTATS']._serialized_start = 6971
_globals['_DEVICESTATS']._serialized_end = 7296
_globals['_RADIOSTATS']._serialized_start = 7299
_globals['_RADIOSTATS']._serialized_end = 7520
_globals['_VAPSTATS']._serialized_start = 7523
_globals['_VAPSTATS']._serialized_end = 7667
_globals['_TUNNELSTATS']._serialized_start = 7670
_globals['_TUNNELSTATS']._serialized_end = 7855
_globals['_CLIENTSTATS']._serialized_start = 7858
_globals['_CLIENTSTATS']._serialized_end = 8076
_globals['_INTERFACESTATS']._serialized_start = 8079
_globals['_INTERFACESTATS']._serialized_end = 8759
_globals['_UPLINKSTATS']._serialized_start = 8762
_globals['_UPLINKSTATS']._serialized_end = 8950
_globals['_UPLINKWANSTATS']._serialized_start = 8953
_globals['_UPLINKWANSTATS']._serialized_end = 9101
_globals['_MODEMSTATS']._serialized_start = 9103
_globals['_MODEMSTATS']._serialized_end = 9189
_globals['_ROLESTATS']._serialized_start = 9191
_globals['_ROLESTATS']._serialized_end = 9295
_globals['_VLANSTATS']._serialized_start = 9297
_globals['_VLANSTATS']._serialized_end = 9396
_globals['_SSIDSTATS']._serialized_start = 9398
_globals['_SSIDSTATS']._serialized_end = 9498
_globals['_TUNNELIPPROBESTATS']._serialized_start = 9501
_globals['_TUNNELIPPROBESTATS']._serialized_end = 9726
_globals['_UPLINKIPPROBESTATS']._serialized_start = 9729
_globals['_UPLINKIPPROBESTATS']._serialized_end = 10464
_globals['_UPLINKSPEEDTEST']._serialized_start = 10467
_globals['_UPLINKSPEEDTEST']._serialized_end = 10694
_globals['_WIDSEVENT']._serialized_start = 10697
_globals['_WIDSEVENT']._serialized_end = 12507
_globals['_WIDSEVENT_EVENTTYPE']._serialized_start = 10958
_globals['_WIDSEVENT_EVENTTYPE']._serialized_end = 11043
_globals['_WIDSEVENT_ATTACKTYPE']._serialized_start = 11046
_globals['_WIDSEVENT_ATTACKTYPE']._serialized_end = 12507
_globals['_AIRMONITORROGUEINFO']._serialized_start = 12510
_globals['_AIRMONITORROGUEINFO']._serialized_end = 13243
_globals['_AIRMONITORROGUEINFO_WMS_RAP_MATCH_TYPE']._serialized_start = 12792
_globals['_AIRMONITORROGUEINFO_WMS_RAP_MATCH_TYPE']._serialized_end = 13118
_globals['_AIRMONITORROGUEINFO_WMS_RAP_NAT_MATCH_TYPE']._serialized_start = 13120
_globals['_AIRMONITORROGUEINFO_WMS_RAP_NAT_MATCH_TYPE']._serialized_end = 13243
_globals['_ROGUEEVENT']._serialized_start = 13246
_globals['_ROGUEEVENT']._serialized_end = 13649
_globals['_ROGUEEVENT_WMS_SNMP_ENCR_PROTOCOL']._serialized_start = 13515
_globals['_ROGUEEVENT_WMS_SNMP_ENCR_PROTOCOL']._serialized_end = 13649
_globals['_DEVICENEIGHBOURS']._serialized_start = 13652
_globals['_DEVICENEIGHBOURS']._serialized_end = 13839
_globals['_MONITORINGINFORMATION']._serialized_start = 13842
_globals['_MONITORINGINFORMATION']._serialized_end = 15579
_globals['_MONITORINGSTATEINFORMATION']._serialized_start = 15582
_globals['_MONITORINGSTATEINFORMATION']._serialized_end = 16282
_globals['_KEYVALUEDATA']._serialized_start = 16284
_globals['_KEYVALUEDATA']._serialized_end = 16326
_globals['_NOTIFICATION']._serialized_start = 16329
_globals['_NOTIFICATION']._serialized_end = 16716
_globals['_NOTIFICATION_SEVERITY']._serialized_start = 16603
_globals['_NOTIFICATION_SEVERITY']._serialized_end = 16674
_globals['_NOTIFICATION_NOTIFICATIONSTATE']._serialized_start = 16676
_globals['_NOTIFICATION_NOTIFICATIONSTATE']._serialized_end = 16716
_globals['_SWITCHVLANINFO']._serialized_start = 16718
_globals['_SWITCHVLANINFO']._serialized_end = 16792
_globals['_SWITCHVLAN']._serialized_start = 16795
_globals['_SWITCHVLAN']._serialized_end = 17367
_globals['_SWITCHVLAN_VLANSTATUS']._serialized_start = 17273
_globals['_SWITCHVLAN_VLANSTATUS']._serialized_end = 17303
_globals['_SWITCHVLAN_VLANTYPE']._serialized_start = 17305
_globals['_SWITCHVLAN_VLANTYPE']._serialized_end = 17367
_globals['_VLAN']._serialized_start = 17370
_globals['_VLAN']._serialized_end = 17790
_globals['_VSXSTATE']._serialized_start = 17793
_globals['_VSXSTATE']._serialized_end = 19191
_globals['_VSXSTATE_DEVICEROLE']._serialized_start = 18561
_globals['_VSXSTATE_DEVICEROLE']._serialized_end = 18601
_globals['_VSXSTATE_ISLPDEVICESTATE']._serialized_start = 18604
_globals['_VSXSTATE_ISLPDEVICESTATE']._serialized_end = 18790
_globals['_VSXSTATE_ISLSTATE']._serialized_start = 18793
_globals['_VSXSTATE_ISLSTATE']._serialized_end = 19191
# @@protoc_insertion_point(module_scope)

@@ -25,4 +25,2 @@ # -*- coding: utf-8 -*-

DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0fstreaming.proto\x12\rStreamMessage\"a\n\x08MsgProto\x12\x0f\n\x07subject\x18\x02 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\x11\n\ttimestamp\x18\x04 \x01(\x03\x12\x13\n\x0b\x63ustomer_id\x18\x05 \x01(\t\x12\x0e\n\x06msp_id\x18\x06 \x01(\tb\x06proto3')

@@ -35,4 +33,4 @@

DESCRIPTOR._loaded_options = None
_globals['_MSGPROTO']._serialized_start=34
_globals['_MSGPROTO']._serialized_end=131
_globals['_MSGPROTO']._serialized_start = 34
_globals['_MSGPROTO']._serialized_end = 131
# @@protoc_insertion_point(module_scope)

@@ -85,2 +85,3 @@ #!/usr/bin/env python3

tty = TTY()

@@ -112,3 +113,3 @@

):
if not hasattr(self, '_initialized'): # Prevent re-initialization
if not hasattr(self, '_initialized'): # Prevent re-initialization
super().__init__(status, console=console, spinner=spinner, spinner_style=spinner_style, speed=speed, refresh_per_second=refresh_per_second)

@@ -160,2 +161,3 @@ else:

# TODO Partial support for sending rich.Text needs to cleaned up and make all output returned to display_results rich.text, use console.print vs typer.echo in display_results

@@ -275,14 +277,16 @@ # Output class can likely be elliminated and return rich.Text from render.output

def _batch_invalid_msg(usage: str, provide: str = None) -> str: # referenced in the batch cli modules
usage = escape(usage)
provide = provide or "Provide [bright_green]IMPORT_FILE[/] or [cyan]--example[/]"
_msg = [
"Invalid combination of arguments / options.",
provide,
"",
f"[yellow]Usage[/]: {usage}",
f"Use [cyan]{usage.split(' [')[0].split('-')[0].rstrip()} --help[/] for help.",
]
return "\n".join(_msg)
usage = escape(usage)
provide = provide or "Provide [bright_green]IMPORT_FILE[/] or [cyan]--example[/]"
_msg = [
"Invalid combination of arguments / options.",
provide,
"",
f"[yellow]Usage[/]: {usage}",
f"Use [cyan]{usage.split(' [')[0].split('-')[0].rstrip()} --help[/] for help.",
]
return "\n".join(_msg)
def write_file(outfile: Path, outdata: str) -> None: # pragma: no cover this function is mocked

@@ -340,2 +344,3 @@ """Output data to file

def _do_subtables(data: List[dict], *, tablefmt: str = "rich") -> List[dict]:

@@ -394,2 +399,3 @@ """Parse data and format any values that are dict, list, tuple

def tabulate_output(outdata: List[dict]) -> tuple:

@@ -422,2 +428,3 @@ customer_id = customer_name = ""

def build_rich_table_rows(data: List[Dict[str, Text | str]], table: Table, group_by: str) -> Table:

@@ -648,2 +655,3 @@ if not group_by:

return str(value) if "," not in str(value) else f'"{value}"'
def normalize_key_for_csv(key: str) -> str:

@@ -702,3 +710,3 @@ if not isinstance(key, str):

if isinstance(raw_data, str): # HACK replace first pass is to line up cols but if table is tighter second pass will swap them regardless
raw_data = raw_data.replace('✅ ', 'True').replace('❌ ', 'False').replace('✅', 'True').replace('❌', 'False') # TODO handle this better
raw_data = raw_data.replace('✅ ', 'True').replace('❌ ', 'False').replace('✅', 'True').replace('❌', 'False') # TODO handle this better

@@ -723,2 +731,3 @@ return Output(rawdata=raw_data, prettydata=table_data, config=config, tablefmt=tablefmt)

con = rich_console or econsole
def abort():

@@ -760,2 +769,3 @@ con.print("\n[dark_orange3]:warning:[/] [red]Aborted[/]", emoji=True)

def pause(prompt: str = "Press Enter to Continue", *, rich_console: Console = None) -> None: # pragma: no cover

@@ -766,2 +776,3 @@ rich_console = rich_console or econsole

def rich_capture(text: str | List[str], emoji: bool = False, **kwargs) -> str:

@@ -789,2 +800,3 @@ """Accept text or list of text with rich markups and return final colorized text with ascii control chars

def unstyle(text: str | List[str], emoji: bool = False, **kwargs) -> str:

@@ -808,2 +820,3 @@ """Accept text or list of text. Removes any markups or ascii color codes from text

def help_block(default_txt: str, help_type: Literal["default", "requires"] = "default") -> str:

@@ -810,0 +823,0 @@ """Helper function that returns properly escaped default text, including rich color markup, for use in CLI help.

@@ -44,3 +44,3 @@ #!/usr/bin/env python3

self.remain_day = int(f"{rh.get('X-RateLimit-Remaining-day', 0)}")
#glp
# glp
self.total_min = int(f"{rh.get('ratelimit-limit', 0)}") # glp

@@ -130,2 +130,3 @@ self.remain_min = int(f"{rh.get('ratelimit-remaining', 0)}") # glp

class Response:

@@ -322,3 +323,2 @@ '''wrapper ClientResponse object

def __bool__(self):

@@ -399,3 +399,2 @@ if self._ok is not None:

def __repr__(self): # pragma: no cover

@@ -525,3 +524,3 @@ _exit_code_str = "" if not self.exit_code else f"|exit code: {self.exit_code}"

def __len__(self):
return(len(self.output)) if not isinstance(self.output, str) else 0
return (len(self.output)) if not isinstance(self.output, str) else 0

@@ -599,3 +598,2 @@ def __getitem__(self, key):

if isinstance(self.output, list) and isinstance(other.output, list):

@@ -728,3 +726,2 @@ self.output += other.output

class CombinedResponse(Response):

@@ -767,3 +764,2 @@ def flatten_resp(responses: List[Response]) -> Response:

# for combining device calls, adds consistent "type" to all devices

@@ -770,0 +766,0 @@ def _get_type(data: dict) -> Literal["ap", "gw", "sw", "cx"] | None:

@@ -131,3 +131,2 @@ #!/usr/bin/env python3

def __str__(self):

@@ -155,2 +154,3 @@ return "\n".join(self.list)

class Example:

@@ -212,2 +212,3 @@ """

bool_strings = ["true", "false", "yes", "no"]
def _convert_bool(value: str, expecting_list: bool = False) -> str | bool | int | list:

@@ -245,5 +246,5 @@ if expecting_list:

def header(self):
header = ["Accepts the following keys (include as header row for csv import):"]
header = ["Accepts the following keys (include as header row for csv import):"]
field_dict = FIELDS[self.action]
required_strings = utils.color(field_dict[self.type]["required"], "red")
required_strings = utils.color(field_dict[self.type]["required"], "red")
header += [f' {required_strings}']

@@ -304,3 +305,2 @@ # if field_dict[self.type].get("optional"): # currently all defined have optional fields

common_add_delete_end = """

@@ -353,3 +353,3 @@ [italic]:information: Batch add and batch delete operations are designed so the same import file can be used.[/]

# -- // MOVE DEVICES \\ --
device_move_data="""
device_move_data = """
serial,mac,group,site,label,retain_config

@@ -375,3 +375,3 @@ CN12345678,aabbccddeeff,phl-access,snantx-1201,,false

# -- // RENAME DEVICES \\ --
data="""
data = """
serial,hostname

@@ -419,3 +419,3 @@ CN12345678,barn.615.ab12

]
data=f"""
data = f"""
{','.join(fields)}

@@ -498,3 +498,3 @@ CN12345678,barn.615.ab12,,,,,consolepi.com,2.4,,,,,,,,,,

[italic]:information: Provide address fields, or geo-location ({utils.color(['longitude' ,'latitude'])}) [red]not both[/].
[italic]:information: Provide address fields, or geo-location ({utils.color(['longitude', 'latitude'])}) [red]not both[/].
[italic] Central will calc long/lat if address is provided,[/]

@@ -577,5 +577,8 @@ [italic] but does not determine address from long/lat

_default_false = escape("[default: False]")
def type_str(_type: str):
return f"[dim]({_type})[/]"
clibatch_add_groups = f"""{example.command_text}

@@ -644,3 +647,3 @@

# -- // CLASSIC SUBSCRIBE DEVICES \\ --
data="""serial,license
data = """serial,license
CN12345678,foundation_switch_6300

@@ -663,3 +666,3 @@ CN12345679,advanced_ap

# -- // VARIABLES \\ --
data="""_sys_serial,_sys_lan_mac,_sys_hostname,_sys_gateway,_sys_module_command,user_var1,user_var2
data = """_sys_serial,_sys_lan_mac,_sys_hostname,_sys_gateway,_sys_module_command,user_var1,user_var2
US12345678,aabbccddeeff,snantx-idf1-sw1,10.0.30.1,type jl728a,value1,value2

@@ -720,3 +723,3 @@ SG12345679,ffee.ddcc.bbaa,snantx-idf1-sw2,10.0.30.1,type jl728a,value1,value2

# -- // GLP SUBSCRIBE DEVICES \\ --
data="""serial,subscription
data = """serial,subscription
CN12345678,foundation_switch_6300

@@ -787,3 +790,3 @@ CN12345679,0f468bdf-e485-087f-abff-fc881f54373c

# -- // ADD MACS (cloud-auth) \\ --
data="""mac,name
data = """mac,name
00:09:B0:75:65:D1,Integra

@@ -806,3 +809,3 @@ 00:1B:4F:23:8A:3E,Avaya VoIP

# -- // ADD MPSK (cloud-auth) \\ -- REMOVED MPSK Column does not appear to be supported
data="""name,role,status
data = """name,role,status
wade@example.com,admin_users,enabled

@@ -864,2 +867,3 @@ jerry@example.com,dia,enabled

cron_weekly = """#!/usr/bin/env bash

@@ -924,2 +928,3 @@

@dataclass

@@ -930,2 +935,3 @@ class Emoji:

@dataclass

@@ -935,3 +941,4 @@ class CLIStrings:

emoji = Emoji()
cli_strings = CLIStrings()

@@ -13,9 +13,8 @@ # future annotations does not work here, need to use Union to support py < 3.10

# The decorator is used as a type hint for the wrapper function
def typed_lru_cache(func: Callable[P, T]) -> Callable[P, T]:
return lru_cache()(func) # Use lru_cache with arguments
return lru_cache()(func) # Use lru_cache with arguments
# Define type variables for function signature preservation

@@ -88,2 +87,3 @@ # F = TypeVar('F', bound=Callable[..., Any])

class CacheSiteDict(TypedDict): # pragma: no cover used for typing for CacheSite payload

@@ -101,2 +101,3 @@ name: str

class UnsetType:

@@ -109,4 +110,6 @@ def __repr__(self):

UNSET = UnsetType()
# These typedefs are done this way (the backup manually typed class then try to import the real type) as vscode

@@ -120,2 +123,3 @@ # fails to resolve or learn the attributes for the manual class when it's in the except block

try:

@@ -122,0 +126,0 @@ from typing import Self # type: ignore # noqa

# -*- coding: utf-8 -*-
#!/usr/bin/env python3
# !/usr/bin/env python3
from __future__ import annotations

@@ -71,2 +71,3 @@

class MacFormat(str, Enum):

@@ -104,3 +105,3 @@ COLS = "COLS"

def cols(self) -> str:
cols = ':'.join(self.clean[i:i+2] for i in range(0, len(self), 2))
cols = ':'.join(self.clean[i:i + 2] for i in range(0, len(self), 2))
if cols.strip().endswith(':'): # handle macs starting with 00 for oobm

@@ -112,7 +113,7 @@ cols = f"00:{cols.strip().rstrip(':')}"

def dashes(self) -> str:
return '-'.join(self.clean[i:i+2] for i in range(0, len(self), 2))
return '-'.join(self.clean[i:i + 2] for i in range(0, len(self), 2))
@property
def dots(self) -> str:
return '.'.join(self.clean[i:i+4] for i in range(0, len(self), 4))
return '.'.join(self.clean[i:i + 4] for i in range(0, len(self), 4))

@@ -185,3 +186,2 @@ @property

@staticmethod

@@ -251,3 +251,2 @@ def is_serial(serial: Union[str, List[str]]) -> bool:

@staticmethod

@@ -284,2 +283,3 @@ def unlistify(data: Any, replace_underscores: bool = True):

exit_prompt_text = f"Use {exit_prompt_text} to submit.\nType [cyan]{abort_str}[/] or use [cyan]CTRL-C[/] to abort.\n[cyan blink]Waiting for Input...[/]\n"
def _get_multiline_sub(prompt: str = prompt, **kwargs):

@@ -380,3 +380,2 @@ prompt = f"{prompt}\n\n{exit_prompt_text}" if prompt else f"[cyan]Enter/Paste content[/]. {exit_prompt_text}"

def strip_no_value(self, data: list[dict] | dict[str, dict], aggressive: bool = False) -> list[dict] | dict[str, dict]:

@@ -490,3 +489,3 @@ """strip out any columns that have no value in any row

@staticmethod
def normalize_device_sub_field(data: list[dict[str, str]], *, word_sep: Literal["-", "_"] = None) -> list[dict[str, str]]:
def normalize_device_sub_field(data: list[dict[str, str]], *, word_sep: Literal["-", "_"] = None) -> list[dict[str, str]]:
possible_sub_keys = ["license", "services", "subscription"]

@@ -499,3 +498,2 @@ if not word_sep:

@staticmethod

@@ -597,13 +595,13 @@ def generate_template(template_file: Path | str, var_file: Path | str | None = None, *, config_data: list | dict = None) -> str:

@staticmethod
def convert_bytes_to_human(size: int | float | Dict[str, int | float] | None, precision: int = 2, throughput: bool = False, speed: bool = False, return_size: Literal['B','KB','MB','GB','TB', 'PB'] = None) -> str | None:
def convert_bytes_to_human(size: int | float | Dict[str, int | float] | None, precision: int = 2, throughput: bool = False, speed: bool = False, return_size: Literal['B', 'KB', 'MB', 'GB', 'TB', 'PB'] = None) -> str | None:
if size is None:
return size
def _number_to_human(_size: int | float, precision: int = precision, throughput: bool = throughput, speed: bool = speed, return_size: Literal['B','KB','MB','GB','TB', 'PB'] = return_size) -> str:
def _number_to_human(_size: int | float, precision: int = precision, throughput: bool = throughput, speed: bool = speed, return_size: Literal['B', 'KB', 'MB', 'GB', 'TB', 'PB'] = return_size) -> str:
factor = 1000 if throughput or speed else 1024
suffixes=['B','KB','MB','GB','TB', 'PB'] if not speed else ["bps", "Kbps", "Mbps", "Gbps", "Tbps", "Pbps"]
suffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'] if not speed else ["bps", "Kbps", "Mbps", "Gbps", "Tbps", "Pbps"]
suffix_idx = 0
while _size > factor and suffix_idx < 5:
suffix_idx += 1 # increment the index of the suffix
_size = _size/float(factor) # apply the division
_size = _size / float(factor) # apply the division
if return_size and suffixes[suffix_idx].upper().startswith(return_size.upper()):

@@ -703,3 +701,3 @@ break

[
f'[green]{k}[/]:[cyan]{v}[/]' if k != 'status' else f'[{"red" if v.lower() == "down" else "bright_green"}]{v}[/]' for k, v in d.items() if k not in ignore_fields and (v or isinstance(v, (bool, int)))
f'[green]{k}[/]:[cyan]{v}[/]' if k != 'status' else f'[{"red" if v.lower() == "down" else "bright_green"}]{v}[/]' for k, v in d.items() if k not in ignore_fields and (v or isinstance(v, (bool, int)))
]

@@ -779,6 +777,6 @@ )

editor = "notepad.exe"
elif sys.platform == "darwin": # macOS
elif sys.platform == "darwin": # macOS
editor = "open"
args = ["-t"] # '-t' for the default text editor, '-e' opens with TextEdit
else: # Linux/Unix
else: # Linux/Unix
# use EDITOR env var fallback to 'editor' (which typically links to nano or vim)

@@ -822,4 +820,5 @@ editor = os.environ.get('EDITOR', 'editor')

if __name__ == "__main__":
...

@@ -39,4 +39,4 @@ #!/usr/bin/env python

name = 'Csv'
aliases = ['csv', 'comma-separated', 'comma-separated-values']
name = 'Csv'
aliases = ['csv', 'comma-separated', 'comma-separated-values']
filenames = ['*.csv']

@@ -108,3 +108,2 @@

if __name__ == '__main__':

@@ -111,0 +110,0 @@ sample_csv_material = """trailer,125

@@ -12,2 +12,3 @@ import sys

# -- break up arguments passed as single string from vscode promptString --

@@ -14,0 +15,0 @@ def vscode_arg_handler():

@@ -79,2 +79,3 @@ #!/usr/bin/env python3

class HookResponse(BaseModel):

@@ -86,3 +87,3 @@ result: str

schema_extra = {
"example": {"result": "OK", "updated": True,}
"example": {"result": "OK", "updated": True, }
}

@@ -106,2 +107,4 @@

}
class BranchResponse(BaseModel):

@@ -183,2 +186,3 @@ id: str

def _default_response(serial: str) -> dict:

@@ -195,2 +199,3 @@ return {

def _hook_response(data: dict) -> dict:

@@ -279,3 +284,2 @@ return {

# TODO hook_data to it's own DB file

@@ -372,3 +376,2 @@ cache.HookDataDB.truncate()

res: APIResponse = await api.session._request(api.monitoring.get_gw_tunnels, data["device_id"])

@@ -375,0 +378,0 @@ if not res:

@@ -46,2 +46,3 @@ #!/usr/bin/env python3

DEFAULT_HEADERS = {

@@ -52,2 +53,3 @@ "Accept": "application/json",

class HookResponse(BaseModel):

@@ -59,3 +61,3 @@ result: str

schema_extra = {
"example": {"result": "OK", "updated": True,}
"example": {"result": "OK", "updated": True, }
}

@@ -79,2 +81,4 @@

}
class BranchResponse(BaseModel):

@@ -134,2 +138,3 @@ id: str

def _default_response(serial: str) -> dict:

@@ -146,2 +151,3 @@ return {

def _hook_response(data: dict) -> dict:

@@ -241,3 +247,2 @@ return {

async def verify_header_auth(self, data: dict, svc: str, sig: str, ts: str, del_id: str):

@@ -270,3 +275,2 @@ """

async def snow_token_refresh(self, refresh_token: str = None) -> bool:

@@ -369,3 +373,3 @@

"result": "ok",
"updated": True # if updated else False
"updated": True # if updated else False
}

@@ -372,0 +376,0 @@

@@ -119,2 +119,3 @@ # pragma: exclude file Still a WIP

async def _clean_mon_data(data: monitoring_pb2.MonitoringInformation):

@@ -246,3 +247,3 @@ # [attr for attr in data.__dir__() if not attr.startswith("_") and not callable(getattr(data, attr)) and getattr(data, attr)]

if mkey == "timestamp":
macs = [DateTime(iface[mkey]) for iface in as_dict[key] if mkey in iface]
macs = [DateTime(iface[mkey]) for iface in as_dict[key] if mkey in iface]
elif mkey in ["deviceId", "associatedDevice"]:

@@ -255,7 +256,7 @@ as_dict = get_devices(as_dict, key=key)

elif mkey in ["essid", "network"]:
macs = [_decode(iface[mkey], field_type=mkey) for iface in as_dict[key] if mkey in iface]
macs = [_decode(iface[mkey], field_type=mkey) for iface in as_dict[key] if mkey in iface]
elif mkey in ["probeIpAddr"]:
macs = [_decode(iface[mkey], field_type=mac_keys[mkey].split("_")[-1]) for iface in as_dict[key] if mkey in iface]
macs = [_decode(iface[mkey], field_type=mac_keys[mkey].split("_")[-1]) for iface in as_dict[key] if mkey in iface]
else:
macs = [_decode(iface[mkey]["addr"], field_type=mac_keys[mkey].split("_")[-1]) for iface in as_dict[key] if mkey in iface]
macs = [_decode(iface[mkey]["addr"], field_type=mac_keys[mkey].split("_")[-1]) for iface in as_dict[key] if mkey in iface]

@@ -273,3 +274,3 @@ if macs:

for ip_key in ip_keys.keys():
ips = [_decode(iface[ip_key]["addr"]) for iface in as_dict[key] if ip_key in iface]
ips = [_decode(iface[ip_key]["addr"]) for iface in as_dict[key] if ip_key in iface]
if ips:

@@ -337,3 +338,2 @@ as_dict[key] = [{k if k != ip_key else ip_keys[ip_key]: v if k != ip_key else ip for k, v in iface.items()} for iface, ip in zip(as_dict[key], ips)]

as_dict = {"timestamp": DateTime(pb_data.timestamp), **{k: v for k, v in as_dict.items() if k != "timestamp"}} # Move timestamp to top and format

@@ -344,3 +344,2 @@ del as_dict["customerId"]

# TODO base_url will be required once not hardcoded, need to determine if base-url can be determined reliably from central base and provide config option for it.

@@ -347,0 +346,0 @@ async def follow_logs(wss_config: WSSConfig, log_type: LogType = "event"):

Metadata-Version: 2.4
Name: centralcli
Version: 9.3.0
Version: 9.3.1
Summary: A CLI for interacting with Aruba Central (Cloud Management Platform). Facilitates bulk imports, exports, reporting. A handy tool if you have devices managed by Aruba Central.

@@ -5,0 +5,0 @@ License-Expression: MIT

[project]
name = "centralcli"
version = "9.3.0"
version = "9.3.1"
description = "A CLI for interacting with Aruba Central (Cloud Management Platform). Facilitates bulk imports, exports, reporting. A handy tool if you have devices managed by Aruba Central."

@@ -206,4 +206,5 @@ license = "MIT"

[tool.ruff.lint]
select = ["E", "F", "W605"]
ignore = ["E501"] # ignore line too long
preview = true
select = ["E", "F", "W605", "E221", "E222", "E241"]
ignore = ["E501", "E116"] # ignore line too long and unexpected indentation for comments

@@ -210,0 +211,0 @@ # Allow autofix for all enabled rules (when `--fix`) is provided.

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display