Ahenk/usr/share/ahenk/plugins/service/get_services.py
2020-04-06 18:13:10 +03:00

128 lines
5.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Author: Cemre ALPSOY <cemre.alpsoy@agem.com.tr>
import json
import subprocess
from base.plugin.abstract_plugin import AbstractPlugin
class ServiceList(object):
def __init__(self):
self.service_list = []
class ServiceListItem:
def __init__(self, service_name, status, auto):
self.serviceName = service_name
self.serviceStatus = status
self.startAuto = auto
def encode_service_object(obj):
if isinstance(obj, ServiceListItem):
return obj.__dict__
return obj
class GetServices(AbstractPlugin):
def __init__(self, data, context):
super(AbstractPlugin, self).__init__()
self.data = data
self.context = context
self.logger = self.get_logger()
self.message_code = self.get_message_code()
self.temp_file_name = str(self.generate_uuid())
self.file_path = '{0}{1}'.format(str(self.Ahenk.received_dir_path()), self.temp_file_name)
self.service_status = 'systemctl status {}'
self.isRecordExist = 0
def handle_task(self):
try:
self.logger.debug('Executing command for service list.')
self.get_service_status()
self.logger.debug('Command executed.')
if self.is_exist(self.file_path):
data = {}
self.logger.debug(str(self.file_path))
md5sum = self.get_md5_file(str(self.file_path))
self.logger.debug('{0} renaming to {1}'.format(self.temp_file_name, md5sum))
self.rename_file(self.file_path, self.Ahenk.received_dir_path() + '/' + md5sum)
self.logger.debug('Renamed.' + self.Ahenk.received_dir_path() + '/' + md5sum)
data['md5'] = md5sum
self.context.create_response(code=self.message_code.TASK_PROCESSED.value,
message='Servis listesi başarıyla okundu.',
data=json.dumps(data),
content_type=self.get_content_type().TEXT_PLAIN.value)
self.logger.debug("Execution Info fetched succesfully. ")
self.logger.debug("Execution Info has sent")
else:
self.context.create_response(code=self.message_code.TASK_ERROR.value,
message='Servis listesi getirilemedi')
self.logger.debug('Service list created successfully')
except Exception as e:
self.logger.error(str(e))
self.context.create_response(code=self.message_code.TASK_ERROR.value,
message='Servis listesi oluşturulurken hata oluştu: ' + str(e))
def add_file(self, name, status, auto_start):
if self.isRecordExist == 0:
self.execute('echo { \\"agent\\" : \\"'+ self.Ahenk.dn() + '\\", \\"service_list\\" :[ >> ' + self.file_path)
self.isRecordExist = 1
t_command = 'echo "{ \\"serviceName\\": \\"' + name + '\\", \\"serviceStatus\\": \\"' + status + '\\", \\"startAuto\\":\\"' + auto_start + '\\"}" >> ' + self.file_path
self.execute(t_command)
self.execute('echo , >> ' + self.file_path)
def add_agentDnToFile(self):
t_command = 'echo "{ \\"agent\\": \\"' + self.Ahenk.dn() +'\\"}" >> ' + self.file_path
self.execute(t_command)
self.execute('echo , >> ' + self.file_path)
def get_service_status(self):
try:
(result_code, p_out, p_err) = self.execute("systemctl list-units --type service --all | grep loaded")
self.create_file(self.file_path)
# service_list = ServiceList()
lines = p_out.split('\n')
for line in lines:
line_split = line.split(' ')
service=[]
for word in line_split:
if word != '' :
service.append(word)
if len(service)>0 and '.service' not in service[0]:
del service[0]
if len(service)>0 and '.service' in service[0]: # service[0] = service name, service[1] is loaded, service[2] active or not,
result, out, err = self.execute(self.service_status.format(service[0])) # check service is enable or not on auto start
auto='INACTIVE'
if 'disabled' in out:
auto='INACTIVE'
elif 'enabled' in out:
auto='ACTIVE'
if service[2] == 'active':
self.add_file(service[0], "ACTIVE", auto)
else:
self.add_file(service[0], 'INACTIVE',auto)
print(service)
if self.isRecordExist == 1:
self.execute("sed -i '$ d' " + self.file_path)
self.execute('echo "]}" >> ' + self.file_path)
except Exception as e:
print(str(e))
self.logger.error(str(e))
def handle_task(task, context):
plugin = GetServices(task, context)
plugin.handle_task()