mirror of
https://github.com/Pardus-LiderAhenk/ahenk
synced 2024-11-26 03:32:19 +03:00
128 lines
5.1 KiB
Python
128 lines
5.1 KiB
Python
#!/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()
|