#!/usr/bin/env python3

#--------------------------------------------
# Admin Metric Script for 'free-mem' metric
#
# Copyright (c) 2020, 2022-2023 by Cisco Systems, Inc.
# All rights reserved.
#--------------------------------------------

import os
import re
import json
import subprocess
from datetime import datetime

def run_cmd(cmd):
   process = subprocess.Popen(cmd, stdout=subprocess.PIPE,
                              stderr=subprocess.PIPE, shell=True)
   out, error = process.communicate()
   sprc = process.returncode
   if sprc is None or sprc != 0:
       if error:
          out = error
   return out.strip()

if __name__ == '__main__':

    metric_name = os.path.basename(__file__)
    data_file = '/pkg/bin/health_check_metrics/admin_metrics/' + metric_name + '.json'
    platform_prefix = "/opt/cisco/calvados/bin/vrfch.sh CTRL_VRF"

    free_mem_metric = []
    free_mem_info = {}
    cmd1 = platform_prefix + " /opt/cisco/calvados/bin/show_memory_common 7 8 all" + " | grep -E 'Location|Physical Memory'"
    cmd = "/pkg/bin/install_exec_sysadmin \"source /opt/cisco/calvados/bin/install-functions.sh ; %s\"" % (cmd1)
    out = run_cmd(cmd)
    for line in out.split('\n'):
        if "Location" in line:
           free_mem_info = {}
           node_name = line.split(':')[1] + "/ADMIN0"
           free_mem_info['node-name'] = node_name
        if "Physical Memory" in line:
           res = re.findall(r'\d+ MB', line)
           res = [x[:-3] for x in res]
           free_mem_info['system-mem'] = int(res[0]) * 1024 * 1024
           free_mem_info['free-mem'] = int(res[1]) * 1024 * 1024
           free_mem_metric.append(free_mem_info)

    with open(data_file, 'w') as json_file:
        json.dump(free_mem_metric, json_file, sort_keys=True, indent=4)
