def create_outfile()

in AzureMonitorAgent/ama_tst/modules/logcollector.py [0:0]


def create_outfile(output_dirpath, logs_date, pkg_manager):
    with open(os.path.join(output_dirpath,"amalinux.out"), 'w') as outfile:
        outfile.write("Log Collection Start Time: {0}\n".format(logs_date))
        outfile.write("--------------------------------------------------------------------------------\n")

        # detected OS + version
        vm_dist, vm_ver, _ = helpers.find_vm_distro()
        if (vm_dist and vm_ver):
            outfile.write("Linux OS detected: {0}\n".format(vm_dist))
            outfile.write("Linux OS version detected: {0}\n".format(vm_ver))
        else:
            outfile.write("Indeterminate OS.\n")

        # detected package manager
        if (pkg_manager != ""):
            outfile.write("Package manager detected: {0}\n".format(pkg_manager))
        else:
            outfile.write("Indeterminate package manager.\n")
        outfile.write("--------------------------------------------------------------------------------\n")

        # uname info
        os_uname = os.uname()
        outfile.write("Hostname: {0}\n".format(os_uname[1]))
        outfile.write("Release Version: {0}\n".format(os_uname[2]))
        outfile.write("Linux UName: {0}\n".format(os_uname[3]))
        outfile.write("Machine Type: {0}\n".format(os_uname[4]))
        outfile.write("--------------------------------------------------------------------------------\n")

        # python version
        outfile.write("Python Version: {0}\n".format(platform.python_version()))
        outfile.write("--------------------------------------------------------------------------------\n")
        
        # /etc/os-release
        if (os.path.isfile("/etc/os-release")):
            outfile.write("Contents of /etc/os-release:\n")
            with open("/etc/os-release", 'r') as os_info:
                for line in os_info:
                    outfile.write(line)
            outfile.write("--------------------------------------------------------------------------------\n")

        # VM Metadata
        attributes = ['azEnvironment', 'resourceId', 'location']
        outfile.write("VM Metadata from IMDS:\n")
        for attr in attributes:
            attr_result = helpers.geninfo_lookup(attr)
            if (not attr_result) and (check_metadata() == NO_ERROR):
                attr_result = helpers.geninfo_lookup(attr)
            if (attr_result != None):
                outfile.write("{0}: {1}\n".format(attr, attr_result))
        outfile.write("--------------------------------------------------------------------------------\n")
        outfile.write("--------------------------------------------------------------------------------\n")


        # AMA install status
        (ama_vers, _) = helpers.find_ama_version()
        (ama_installed, ama_unique) = helpers.check_ama_installed(ama_vers)
        outfile.write("AMA Install Status: {0}\n".format("installed" if ama_installed else "not installed"))
        if (ama_installed):
            if (not ama_unique):
                outfile.write("Multiple AMA versions detected: {0}\n".format(', '.join(ama_vers)))
            else:
                outfile.write("AMA Version: {0}\n".format(ama_vers[0]))
        outfile.write("--------------------------------------------------------------------------------\n")

        # connection to endpoints
        wkspc_id, wkspc_region, e = helpers.find_dcr_workspace()
        if e == None:
            outfile.write("Workspace ID: {0}\n".format(str(wkspc_id)))
            outfile.write("Workspace region: {0}\n".format(str(wkspc_region)))
            outfile.write("--------------------------------------------------------------------------------\n")
               
        # AMA package info (dpkg/rpm)
        if (pkg_manager == "dpkg"):
            outfile.write("Output of command: {0}\n".format(DPKG_CMD))
            outfile.write("========================================\n")
            outfile.write(helpers.run_cmd_output(DPKG_CMD))
            outfile.write("--------------------------------------------------------------------------------\n")
        elif (pkg_manager == "rpm"):
            outfile.write("Output of command: {0}\n".format(RPM_CMD))
            outfile.write("========================================\n")
            outfile.write(helpers.run_cmd_output(RPM_CMD))
            outfile.write("--------------------------------------------------------------------------------\n")
        outfile.write("--------------------------------------------------------------------------------\n")

        # ps -ef output
        for process in ["azuremonitoragent", "mdsd", "telegraf"]:
            ps_process_cmd = PS_CMD.format(process)
            outfile.write("Output of command: {0}\n".format(ps_process_cmd))
            outfile.write("========================================\n")
            outfile.write(helpers.run_cmd_output(ps_process_cmd))
            outfile.write("--------------------------------------------------------------------------------\n")
        outfile.write("--------------------------------------------------------------------------------\n")

        # rsyslog / syslog-ng status via systemctl
        for syslogd in ["rsyslog", "syslog-ng"]:
            systemctl_cmd = SYSTEMCTL_CMD.format(syslogd)
            outfile.write("Output of command: {0}\n".format(systemctl_cmd))
            outfile.write("========================================\n")
            outfile.write(helpers.run_cmd_output(systemctl_cmd))
            outfile.write("--------------------------------------------------------------------------------\n")
        outfile.write("--------------------------------------------------------------------------------\n")

        # ps aux output
        for cmd in [PS_CMD_CPU, PS_CMD_RSS, PS_CMD_VSZ]:
            outfile.write("Output of command: {0}\n".format(cmd))
            outfile.write("========================================\n")
            outfile.write(helpers.run_cmd_output(cmd))
            outfile.write("--------------------------------------------------------------------------------\n")
        outfile.write("--------------------------------------------------------------------------------\n")

        # du output on events folder
        for flag in ["", "--apparent-size"]:
            du_full_cmd = DU_CMD.format(flag)
            outfile.write("Output of command: {0}\n".format(du_full_cmd))
            outfile.write("========================================\n")
            outfile.write(helpers.run_cmd_output(du_full_cmd))
            outfile.write("--------------------------------------------------------------------------------\n")
        outfile.write("--------------------------------------------------------------------------------\n")

        # du output on /var folder
        for flag in ["", "--apparent-size"]:
            du_full_cmd = VAR_DU_CMD.format(flag)
            outfile.write("Output of command: {0}\n".format(du_full_cmd))
            outfile.write("========================================\n")
            outfile.write(helpers.run_cmd_output(du_full_cmd))
            outfile.write("--------------------------------------------------------------------------------\n")
            
        # file permission check
        for file in PERMISSION_CHECK_FILES:
            file_permission_cmd = LS_CMD.format(file)
            outfile.write("Output of command: {0}\n".format(file_permission_cmd))
            outfile.write("========================================\n")
            outfile.write(helpers.run_cmd_output(file_permission_cmd))
            outfile.write("--------------------------------------------------------------------------------\n")
        outfile.write("--------------------------------------------------------------------------------\n")
        
        # parent directory permission check
        for file in PERMISSION_CHECK_FILES:
            dir_permission_cmd = NAMEI_CMD.format(file)
            outfile.write("Output of command: {0}\n".format(dir_permission_cmd))
            outfile.write("========================================\n")
            outfile.write(helpers.run_cmd_output(dir_permission_cmd))
            outfile.write("--------------------------------------------------------------------------------\n")
        outfile.write("--------------------------------------------------------------------------------\n")