AzureMonitorAgent/ama_tst/modules/connect/connect.py (94 lines of code) (raw):
import os
import json
import subprocess
import platform
from error_codes import *
from errors import error_info, is_error, print_errors
from helpers import general_info, is_metrics_configured, find_dcr_workspace
from .check_endpts import check_internet_connect, check_ama_endpts
from .check_imds import check_imds_api
try:
FileNotFoundError
except NameError:
FileNotFoundError = IOError
def check_parameters():
global general_info
try:
with open('/etc/default/azuremonitoragent', 'r') as fp:
for line in fp:
line = line.split('export')[1].strip()
key = line.split('=')[0]
value = line.split('=')[1]
general_info[key] = value
except (FileNotFoundError, AttributeError) as e:
error_info.append((e,))
return ERR_AMA_PARAMETERS
return NO_ERROR
def check_workspace():
wkspc_id, wkspc_region, e = find_dcr_workspace()
if e != None:
error_info.append((e,))
return ERR_NO_DCR
return NO_ERROR
def check_subcomponents():
services = ['azuremonitoragent']
services.append('azuremonitor-coreagent')
services.append('azuremonitor-agentlauncher')
if is_metrics_configured():
services.append('metrics-sourcer')
services.append('metrics-extension')
for service in services:
try:
status = subprocess.check_output(['systemctl', 'status', service],\
universal_newlines=True, stderr=subprocess.STDOUT)
status_lines = status.split('\n')
for line in status_lines:
line = line.strip()
if line.startswith('Active:'):
if not line.split()[1] == 'active':
error_info.append((service, status))
return ERR_SUBCOMPONENT_STATUS
except subprocess.CalledProcessError as e:
error_info.append((e,))
return ERR_CHECK_STATUS
return NO_ERROR
def check_connection(interactive, err_codes=True, prev_success=NO_ERROR):
print("CHECKING CONNECTION...")
success = prev_success
# check /etc/default/azuremonitoragent file
print("Checking AMA parameters in /etc/default/azuremonitoragent...")
checked_parameters = check_parameters()
if (is_error(checked_parameters)):
return print_errors(checked_parameters)
else:
success = print_errors(checked_parameters)
# check DCR
print("Checking DCR...")
checked_workspace = check_workspace()
if (is_error(checked_workspace)):
return print_errors(checked_workspace)
else:
success = print_errors(checked_workspace)
# check general internet connectivity
print("Checking if machine is connected to the internet...")
checked_internet_connect = check_internet_connect()
if (is_error(checked_internet_connect)):
return print_errors(checked_internet_connect)
else:
success = print_errors(checked_internet_connect)
# check if AMA endpoints connected
print("Checking if machine can connect to Azure Monitor control-plane and data ingestion endpoints...")
checked_ama_endpts = check_ama_endpts()
if (is_error(checked_ama_endpts)):
return print_errors(checked_ama_endpts)
else:
success = print_errors(checked_ama_endpts)
# check if subcomponents are active (e.g. mdsd, telegraf, etc)
print("Checking if subcomponents have been started...")
checked_subcomponents = check_subcomponents()
if (is_error(checked_subcomponents)):
return print_errors(checked_subcomponents)
else:
success = print_errors(checked_subcomponents)
print("Checking if IMDS metadata and MSI tokens are available...")
checked_imds_api = check_imds_api()
if (is_error(checked_imds_api)):
return print_errors(checked_imds_api)
else:
success = print_errors(checked_imds_api)
return success