Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/command_modules/azure-cli-monitor/HISTORY.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.. :changelog:

Release History
===============
1 change: 1 addition & 0 deletions src/command_modules/azure-cli-monitor/MANIFEST.in
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
include *.rst
3 changes: 3 additions & 0 deletions src/command_modules/azure-cli-monitor/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Microsoft Azure CLI 'Monitor' Command Module
============================================

7 changes: 7 additions & 0 deletions src/command_modules/azure-cli-monitor/azure/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------

import pkg_resources
pkg_resources.declare_namespace(__name__)
7 changes: 7 additions & 0 deletions src/command_modules/azure-cli-monitor/azure/cli/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------

import pkg_resources
pkg_resources.declare_namespace(__name__)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------

import pkg_resources
pkg_resources.declare_namespace(__name__)
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------

import azure.cli.command_modules.monitor.help # pylint: disable=unused-import


def load_params(_):
import azure.cli.command_modules.monitor.params # pylint: disable=redefined-outer-name


def load_commands():
import azure.cli.command_modules.monitor.commands # pylint: disable=redefined-outer-name
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------


# MANAGEMENT CLIENT FACTORIES
def get_monitor_management_client(_):
from azure.mgmt.monitor import MonitorManagementClient
from azure.cli.core.commands.client_factory import get_mgmt_service_client
return get_mgmt_service_client(MonitorManagementClient)


def get_monitor_autoscale_settings_operation(kwargs):
return get_monitor_management_client(kwargs).autoscale_settings


def get_monitor_diagnostic_settings_operation(kwargs):
return get_monitor_management_client(kwargs).service_diagnostic_settings


def get_monitor_alert_rules_operation(kwargs):
return get_monitor_management_client(kwargs).alert_rules


def get_monitor_alert_rule_incidents_operation(kwargs):
return get_monitor_management_client(kwargs).alert_rule_incidents


def get_monitor_log_profiles_operation(kwargs):
return get_monitor_management_client(kwargs).log_profiles


# DATA CLIENT FACTORIES
def get_monitor_client(_):
from azure.monitor import MonitorClient
from azure.cli.core.commands.client_factory import get_mgmt_service_client
return get_mgmt_service_client(MonitorClient)


def get_monitor_activity_log_operation(kwargs):
return get_monitor_client(kwargs).activity_logs


def get_monitor_metric_definitions_operation(kwargs):
return get_monitor_client(kwargs).metric_definitions


def get_monitor_metrics_operation(kwargs):
return get_monitor_client(kwargs).metrics
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------

from azure.cli.core.commands import register_cli_argument, cli_command
from azure.cli.core.commands.parameters import ignore_type
from azure.cli.core.commands.arm import cli_generic_update_command


# COMMANDS UTILITIES

def create_service_adapter(service_model, service_class=None):
def _service_adapter(method_name):
if service_class is not None:
return '{}#{}.{}'.format(service_model, service_class, method_name)
else:
return '{}#{}'.format(service_model, method_name)

return _service_adapter


# pylint: disable=too-few-public-methods
class ServiceGroup(object):
def __init__(self, scope, client_factory, service_adapter=None):
self._scope = scope
self._factory = client_factory
self._service_adapter = service_adapter or (lambda name: name)

def __enter__(self):
return self

def __exit__(self, exc_type, exc_val, exc_tb):
pass

def group(self, group_name):
return CommandGroup(self._scope, group_name, self._factory, self._service_adapter)


class CommandGroup(object):
def __init__(self, scope, group_name, client_factory, service_adapter=None):
self._scope = scope
self._group_name = group_name
self._client_factory = client_factory
self._service_adapter = service_adapter or (lambda name: name)

def __enter__(self):
return self

def __exit__(self, exc_type, exc_val, exc_tb):
pass

def command(self, name, method_name):
cli_command(self._scope,
'{} {}'.format(self._group_name, name),
self._service_adapter(method_name),
client_factory=self._client_factory)

def generic_update_command(self, name, getter_op, setter_op):
cli_generic_update_command(
self._scope,
'{} {}'.format(self._group_name, name),
self._service_adapter(getter_op),
self._service_adapter(setter_op),
factory=self._client_factory)


# PARAMETERS UTILITIES

def patch_arg_make_required(argument):
argument.type.settings['required'] = True


def patch_arg_update_description(description):
def _patch_action(argument):
argument.type.settings['help'] = description

return _patch_action


class ParametersContext(object):
def __init__(self, command):
self._commmand = command

def __enter__(self):
return self

def __exit__(self, exc_type, exc_val, exc_tb):
pass

def ignore(self, argument_name):
register_cli_argument(self._commmand, argument_name, ignore_type)

def argument(self, argument_name, arg_type=None, **kwargs):
register_cli_argument(self._commmand, argument_name, arg_type=arg_type, **kwargs)

def register_alias(self, argument_name, options_list):
register_cli_argument(self._commmand, argument_name, options_list=options_list)

def register(self, argument_name, options_list, **kwargs):
register_cli_argument(self._commmand, argument_name, options_list=options_list, **kwargs)

def expand(self, argument_name, model_type, group_name=None, patches=None):
# TODO:
# two privates symbols are imported here. they should be made public or this utility class
# should be moved into azure.cli.core
from azure.cli.core.commands import _cli_extra_argument_registry
from azure.cli.core.commands._introspection import \
(extract_args_from_signature, _option_descriptions)

from azure.cli.command_modules.monitor.validators import get_complex_argument_processor

if not patches:
patches = dict()

self.ignore(argument_name)

# fetch the documentation for model parameters first. for models, which are the classes
# derive from msrest.serialization.Model and used in the SDK API to carry parameters, the
# document of their properties are attached to the classes instead of constructors.
parameter_docs = _option_descriptions(model_type)

expanded_arguments = []
for name, arg in extract_args_from_signature(model_type.__init__):
if name in parameter_docs:
arg.type.settings['help'] = parameter_docs[name]

if group_name:
arg.type.settings['arg_group'] = group_name

if name in patches:
patches[name](arg)

_cli_extra_argument_registry[self._commmand][name] = arg
expanded_arguments.append(name)

self.argument(argument_name,
arg_type=ignore_type,
validator=get_complex_argument_processor(expanded_arguments,
argument_name,
model_type))
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"autoscale_setting_resource_name": "{MyAutoscaleSettings}",
"location": "West US",
"tags": {},
"profiles": [
{
"name": "{AutoscaleProfile}",
"capacity": {
"minimum": "1",
"maximum": "5",
"default": "3"
},
"rules": [
{
"metric_trigger": {
"metric_name": "{name}",
"metric_resource_uri": "{FullyQualifiedAzureResourceID}",
"time_grain": "(duration in ISO8601 format)PT5M",
"statistic": "{Average|Min|Max|Sum}",
"time_window": "(duration in ISO8601 format)PT45M",
"time_aggregation": "{Average|Minimum|Maximum|Total|Count}",
"operator": "{Equals|NotEquals|GreaterThan|GreaterThanOrEqual|LessThan|LessThanOrEquals}",
"threshold": 100
},
"scale_action": {
"direction": "{None|Increase|Decrease}",
"type": "{ChangeCount|PercentChangeCount|ExactCount}",
"value": "2 (number of instances that are involved in the scaling)",
"cooldown": "(duration in ISO8601 format)PT20M"
}
}
]
}
],
"notifications": [],
"enabled": false,
"target_resource_uri": "{FullyQualifiedAzureResourceID}"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------

from ._client_factory import (get_monitor_alert_rules_operation,
get_monitor_alert_rule_incidents_operation,
get_monitor_log_profiles_operation,
get_monitor_autoscale_settings_operation,
get_monitor_diagnostic_settings_operation,
get_monitor_activity_log_operation,
get_monitor_metric_definitions_operation,
get_monitor_metrics_operation)
from ._util import (ServiceGroup, create_service_adapter)


# MANAGEMENT COMMANDS
alert_rules_operations = create_service_adapter(
'azure.mgmt.monitor.operations.alert_rules_operations',
'AlertRulesOperations')

with ServiceGroup(__name__, get_monitor_alert_rules_operation, alert_rules_operations) as s:
with s.group('monitor alert-rules') as c:
c.command('create', 'create_or_update')
c.command('delete', 'delete')
c.command('show', 'get')
c.command('list', 'list_by_resource_group')
c.generic_update_command('update', 'get', 'create_or_update')

alert_rule_incidents_operations = create_service_adapter(
'azure.mgmt.monitor.operations.alert_rule_incidents_operations',
'AlertRuleIncidentsOperations')

with ServiceGroup(__name__, get_monitor_alert_rule_incidents_operation,
alert_rule_incidents_operations) as s:
with s.group('monitor alert-rule-incidents') as c:
c.command('show', 'get')
c.command('list', 'list_by_alert_rule')

log_profiles_operations = create_service_adapter(
'azure.mgmt.monitor.operations.log_profiles_operations',
'LogProfilesOperations')

with ServiceGroup(__name__, get_monitor_log_profiles_operation,
log_profiles_operations) as s:
with s.group('monitor log-profiles') as c:
c.command('create', 'create_or_update')
c.command('delete', 'delete')
c.command('show', 'get')
c.command('list', 'list')
c.generic_update_command('update', 'get', 'create_or_update')

diagnostic_settings_operations = create_service_adapter(
'azure.mgmt.monitor.operations.service_diagnostic_settings_operations',
'ServiceDiagnosticSettingsOperations')

with ServiceGroup(__name__, get_monitor_diagnostic_settings_operation,
diagnostic_settings_operations) as s:
with s.group('monitor diagnostic-settings') as c:
c.command('create', 'create_or_update')
c.command('show', 'get')
c.generic_update_command('update', 'get', 'create_or_update')

autoscale_settings_operations = create_service_adapter(
'azure.mgmt.monitor.operations.autoscale_settings_operations',
'AutoscaleSettingsOperations')

with ServiceGroup(__name__, get_monitor_autoscale_settings_operation,
autoscale_settings_operations) as s:
with s.group('monitor autoscale-settings') as c:
c.command('create', 'create_or_update')
c.command('delete', 'delete')
c.command('show', 'get')
c.command('list', 'list_by_resource_group')
c.generic_update_command('update', 'get', 'create_or_update')

autoscale_settings_scaffold = create_service_adapter(
'azure.cli.command_modules.monitor.custom')

with ServiceGroup(__name__, get_monitor_autoscale_settings_operation,
autoscale_settings_scaffold) as s:
with s.group('monitor autoscale-settings') as c:
c.command('get-parameters-template', 'scaffold_autoscale_settings_parameters')


# DATA COMMANDS
activity_logs_operations = create_service_adapter(
'azure.cli.command_modules.monitor.custom')

with ServiceGroup(__name__, get_monitor_activity_log_operation,
activity_logs_operations) as s:
with s.group('monitor activity-log') as c:
c.command('list', 'list_activity_log')

metric_definitions_operations = create_service_adapter(
'azure.cli.command_modules.monitor.custom')

with ServiceGroup(__name__, get_monitor_metric_definitions_operation,
metric_definitions_operations) as s:
with s.group('monitor metric-definitions') as c:
c.command('list', 'list_metric_definitions')

metrics_operations = create_service_adapter(
'azure.cli.command_modules.monitor.custom')

with ServiceGroup(__name__, get_monitor_metrics_operation, metrics_operations) as s:
with s.group('monitor metrics') as c:
c.command('list', 'list_metrics')
Loading