in advanced-monitoring/Worker/main.py [0:0]
def main():
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
#set output files:
interface_csv = "./interface.csv"
cpu_csv = "./cpu.csv"
#Get Identity
try:
if os.environ['local'] == "True":
credential = AzureCliCredential()
except:
try:
MSI_credential = ManagedIdentityCredential(client_id=os.environ['client_id'])
except:
MSI_credential = DefaultAzureCredential()
credential = ChainedTokenCredential(MSI_credential)
#collect cloud info
resource_id = os.environ['AVS_CLOUD_ID']
subscription_id = resource_id[15:resource_id[15:].find("/")+15]
avs_client = AVSClient(credential, subscription_id)
resource_group_name = resource_id[resource_id.find("resourceGroups/")+15:resource_id.find("/",resource_id.find("resourceGroups/")+15)]
private_cloud_name = resource_id[resource_id.find("privateClouds/")+14:]
print("Subscription Id: {}\r\nResource Group Name: {}\r\nCloud Name: {}".format(subscription_id,resource_group_name,private_cloud_name))
logger.debug("Subscription Id: {}\r\nResource Group Name: {}\r\nCloud Name: {}".format(subscription_id,resource_group_name,private_cloud_name))
#get cloud object
cloud = avs_client.private_clouds.get(resource_group_name=resource_group_name,private_cloud_name=private_cloud_name)
#colllect more info
region_id = cloud.location
nsxUri= cloud.endpoints.nsxt_manager[:-1]
cloud_credentials = avs_client.private_clouds.list_admin_credentials(resource_group_name, cloud.name)
#set env for telegraf
os.environ["VCSA_URI"] = cloud.endpoints.vcsa
os.environ["VCSA_USER"] = cloud_credentials.vcenter_username
os.environ["VCSA_PASS"] = cloud_credentials.vcenter_password
os.environ["REGION"] = region_id
os.system("systemctl stop telegraf")
#set telegraf vars
os.system('systemctl import-environment VCSA_URI')
os.system('systemctl import-environment VCSA_USER')
os.system('systemctl import-environment VCSA_PASS')
os.system('systemctl import-environment REGION')
os.system('systemctl import-environment AVS_CLOUD_ID')
sleep(10)
os.system("systemctl start telegraf")
#connect to nsx-t
nsxtConnection = NSXTConnection(nsxtUri=nsxUri, nsxtUsername=cloud_credentials.nsxt_username, nsxtPassword=cloud_credentials.nsxt_password)
### Get T0s Interfaces ###
nsxtT0 = getT0s(nsxtConnection=nsxtConnection)[0]
### Get EVM Transport Nodes ###
nodes = getEdgeNodes(nsxtConnection=nsxtConnection)
count=0
#main loop
while True:
try:
# get stats
interfacestats = nsxtT0.getInterfacesStats()
cpustats = getCpuStats(nodes=nodes)
#check to make sure old dataframe exists
if (count == 1):
#create new frame for delta values
delta_frame = pandas.DataFrame(columns= interfacestats.columns)
#loop through rows
for index, row in interfacestats.iterrows():
#find coresponding row in old
df2row = interfacestatsold.loc[interfacestatsold['t0_interface']==row['t0_interface']]
#add new row to delta
delta_frame = delta_frame.append(pandas.Series(dtype='float64'),ignore_index=True)
#loop through cols
for col_name, value in row.items():
#try to set numerical value. on error assum string
try:
elapsed_s = (int(df2row['last_update_timestamp'])-int(row['last_update_timestamp']))/1000
delta_frame.loc[len(delta_frame.index)-1][col_name]=(int(df2row[col_name])-int(row[col_name]))/elapsed_s
except:
delta_frame.loc[len(delta_frame.index)-1][col_name]=value
#write to disk with header if new append if exists
if os.path.isfile(interface_csv):
delta_frame.to_csv(interface_csv, index=False, mode="a",header=False)
else:
delta_frame.to_csv(interface_csv, index=False, mode="a",header=True)
if os.path.isfile(cpu_csv):
cpustats.to_csv(cpu_csv, index=False,mode="a",header=False)
else:
cpustats.to_csv(cpu_csv, index=False,mode="a",header=True)
#make copy of frame for next lop
interfacestatsold = interfacestats.copy(deep=True)
else:
#make old frame if not exiting
interfacestatsold = interfacestats.copy(deep=True)
except Exception as e:
print(e)
logger.debug(e)
break
#set 1 after first run
count = 1
#sleep for 60 seconds
sleep(60)
return