source: ogAgent-Git/src/opengnsys/windows/OGAgentService.py @ 5294919

configure-ptt-chedecorare-oglive-methodsejecutarscript-b64fix-cfg2objfixes-winlgromero-filebeatmainmodulesnew-browserno-ptt-paramogadmcliogadmclient-statusogagent-jobsogagent-macosogcore1oglogoglog2override-moduleping1ping2ping3ping4py3-winreport-progresstlsunification2unification3versionswindows-fixes
Last change on this file since 5294919 was 9bfb4ee, checked in by ramon <ramongomez@…>, 9 years ago

#718: Parámetros de descripción finales para OGAgent.

git-svn-id: https://opengnsys.es/svn/branches/version1.1@5040 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100644
File size: 5.0 KB
Line 
1# -*- coding: utf-8 -*-
2#
3# Copyright (c) 2014 Virtual Cable S.L.
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without modification,
7# are permitted provided that the following conditions are met:
8#
9#    * Redistributions of source code must retain the above copyright notice,
10#      this list of conditions and the following disclaimer.
11#    * Redistributions in binary form must reproduce the above copyright notice,
12#      this list of conditions and the following disclaimer in the documentation
13#      and/or other materials provided with the distribution.
14#    * Neither the name of Virtual Cable S.L. nor the names of its contributors
15#      may be used to endorse or promote products derived from this software
16#      without specific prior written permission.
17#
18# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29'''
30@author: Adolfo Gómez, dkmaster at dkmon dot com
31'''
32from __future__ import unicode_literals
33# pylint: disable=unused-wildcard-import, wildcard-import
34
35import win32serviceutil  # @UnresolvedImport, pylint: disable=import-error
36import win32service  # @UnresolvedImport, pylint: disable=import-error
37import win32security  # @UnresolvedImport, pylint: disable=import-error
38import win32net  # @UnresolvedImport, pylint: disable=import-error
39import win32event  # @UnresolvedImport, pylint: disable=import-error
40import win32com.client  # @UnresolvedImport,  @UnusedImport, pylint: disable=import-error
41import pythoncom  # @UnresolvedImport, pylint: disable=import-error
42import servicemanager  # @UnresolvedImport, pylint: disable=import-error
43import os
44
45from opengnsys import operations
46from opengnsys.service import CommonService
47
48from opengnsys.log import logger
49
50class OGAgentSvc(win32serviceutil.ServiceFramework, CommonService):
51    '''
52    This class represents a Windows Service for managing Agent interactions
53    with OpenGnsys Server
54    '''
55    _svc_name_ = "OGAgent"
56    _svc_display_name_ = "OpenGnsys Agent Service"
57    _svc_description_ = "OpenGnsys Agent for Operating Systems"
58    # 'System Event Notification' is the SENS service
59    _svc_deps_ = ['EventLog']
60
61    def __init__(self, args):
62        win32serviceutil.ServiceFramework.__init__(self, args)
63        CommonService.__init__(self)
64        self.hWaitStop = win32event.CreateEvent(None, 1, 0, None)
65        self._user = None
66
67    def SvcStop(self):
68        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
69        self.isAlive = False
70        win32event.SetEvent(self.hWaitStop)
71
72    SvcShutdown = SvcStop
73
74    def notifyStop(self):
75        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
76                              servicemanager.PYS_SERVICE_STOPPED,
77                              (self._svc_name_, ''))
78
79    def doWait(self, miliseconds):
80        win32event.WaitForSingleObject(self.hWaitStop, miliseconds)
81
82    def SvcDoRun(self):
83        '''
84        Main service loop
85        '''
86        try:
87            logger.debug('running SvcDoRun')
88            servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
89                                  servicemanager.PYS_SERVICE_STARTED,
90                                  (self._svc_name_, ''))
91
92            # call the CoInitialize to allow the registration to run in an other
93            # thread
94            logger.debug('Initializing com...')
95            pythoncom.CoInitialize()
96
97            # Initialize remaining service data
98            self.initialize()
99        except Exception:  # Any init exception wil be caught, service must be then restarted
100            logger.exception()
101            logger.debug('Exiting service with failure status')
102            os._exit(-1)  # pylint: disable=protected-access
103
104        # *********************
105        # * Main Service loop *
106        # *********************
107        try:
108            while self.isAlive:
109                # Pumps & processes any waiting messages
110                pythoncom.PumpWaitingMessages()
111                win32event.WaitForSingleObject(self.hWaitStop, 1000)
112        except Exception as e:
113            logger.error('Caught exception on main loop: {}'.format(e))
114
115        logger.debug('Exited main loop, deregistering SENS')
116
117        self.terminate()  # Ends IPC servers
118
119        self.notifyStop()
120
121
122if __name__ == '__main__':
123   
124    win32serviceutil.HandleCommandLine(OGAgentSvc)
Note: See TracBrowser for help on using the repository browser.