1
2
3
4
5
6
7
8
9
10
11
12
13 __doc__ = """zenping
14
15 Determines the availability of a IP addresses using ping (ICMP).
16
17 """
18 import os.path
19 import re
20 import socket
21 import time
22 import logging
23 log = logging.getLogger("zen.zenping")
24
25 import Globals
26 import zope.interface
27 import zope.component
28
29 from Products import ZenStatus
30 from Products.ZenCollector import daemon
31 from Products.ZenCollector import interfaces
32 from Products.ZenCollector import tasks
33 from Products.ZenUtils import IpUtil
34
35
36 from Products.ZenUtils.Utils import unused
37 from Products.ZenCollector.services.config import DeviceProxy
38 from Products.ZenHub.services.PingPerformanceConfig import PingPerformanceConfig
39 unused(DeviceProxy)
40 unused(PingPerformanceConfig)
41
42
43 COLLECTOR_NAME = "zenping"
44 CONFIG_SERVICE = 'Products.ZenHub.services.PingPerformanceConfig'
45
51
53 """
54 Introspect the command line args to find --ping-backend because
55 buildOptions doesn't get called until later.
56 """
57 import sys
58 backend = 'nmap'
59 try:
60 for i, arg in enumerate(sys.argv):
61 if arg == '--ping-backend':
62 return sys.argv[i+1]
63 elif arg.startswith('--ping-backend='):
64 return arg.split('=', 1)[1]
65 except IndexError:
66 pass
67 return backend
68
69
70 if __name__ == '__main__':
71
72
73 import Products.ZenossStartup
74 from Products.Five import zcml
75 zcml.load_site()
76 pingBackend = getPingBackend()
77
78 myPreferences = zope.component.getUtility(ZenStatus.interfaces.IPingCollectionPreferences, pingBackend)
79 myTaskFactory = zope.component.getUtility(ZenStatus.interfaces.IPingTaskFactory, pingBackend)
80 myTaskSplitter = PerIpAddressTaskSplitter(myTaskFactory)
81 myDaemon = daemon.CollectorDaemon(
82 myPreferences,
83 myTaskSplitter,
84 stoppingCallback=myPreferences.preShutdown,
85 )
86 myDaemon.run()
87