Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1313)

Side by Side Diff: infra_libs/ts_mon/common/targets.py

Issue 2213143002: Add infra_libs as a bootstrap dependency. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Removed the ugly import hack Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 """Classes representing the monitoring interface for tasks or devices."""
6
7
8 class Target(object):
9 """Abstract base class for a monitoring target.
10
11 A Target is a "thing" that should be monitored, for example, a device or a
12 process. The majority of the time, a single process will have only a single
13 Target.
14
15 Do not directly instantiate an object of this class.
16 Use the concrete child classes instead:
17 * TaskTarget to monitor a job or tasks running in (potentially) many places;
18 * DeviceTarget to monitor a host machine that may be running a task.
19 """
20
21 def __init__(self):
22 # Subclasses should list the updatable target fields here.
23 self._fields = tuple()
24
25 def _populate_target_pb(self, metric):
26 """Populate the 'target' embedded message field of a metric protobuf."""
27 raise NotImplementedError()
28
29 def to_dict(self):
30 """Return target field values as a dictionary."""
31 return {field: getattr(self, field) for field in self._fields}
32
33 def update(self, target_fields):
34 """Update values of some target fields given as a dict."""
35 for field, value in target_fields.iteritems():
36 if field not in self._fields:
37 raise AttributeError('Bad target field: %s' % field)
38 # Make sure the attribute actually exists in the object.
39 getattr(self, field)
40 setattr(self, field, value)
41
42
43 class DeviceTarget(Target):
44 """Monitoring interface class for monitoring specific hosts or devices."""
45
46 def __init__(self, region, role, network, hostname):
47 """Create a Target object exporting info about a specific device.
48
49 Args:
50 region (str): physical region in which the device is located.
51 role (str): role of the device.
52 network (str): virtual network on which the device is located.
53 hostname (str): name by which the device self-identifies.
54 """
55 super(DeviceTarget, self).__init__()
56 self.region = region
57 self.role = role
58 self.network = network
59 self.hostname = hostname
60 self.realm = 'ACQ_CHROME'
61 self.alertable = True
62 self._fields = ('region', 'role', 'network', 'hostname')
63
64 def _populate_target_pb(self, metric):
65 """Populate the 'network_device' embedded message of a metric protobuf.
66
67 Args:
68 metric (metrics_pb2.MetricsData): the metric proto to be populated.
69 """
70 # Note that this disregards the pop, asn, role, and vendor fields.
71 metric.network_device.metro = self.region
72 metric.network_device.role = self.role
73 metric.network_device.hostgroup = self.network
74 metric.network_device.hostname = self.hostname
75 metric.network_device.realm = self.realm
76 metric.network_device.alertable = self.alertable
77
78
79 class TaskTarget(Target):
80 """Monitoring interface class for monitoring active jobs or processes."""
81
82 def __init__(self, service_name, job_name, region, hostname, task_num=0):
83 """Create a Target object exporting info about a specific task.
84
85 Args:
86 service_name (str): service of which this task is a part.
87 job_name (str): specific name of this task.
88 region (str): general region in which this task is running.
89 hostname (str): specific machine on which this task is running.
90 task_num (int): replication id of this task.
91 """
92 super(TaskTarget, self).__init__()
93 self.service_name = service_name
94 self.job_name = job_name
95 self.region = region
96 self.hostname = hostname
97 self.task_num = task_num
98 self._fields = ('service_name', 'job_name', 'region',
99 'hostname', 'task_num')
100
101 def _populate_target_pb(self, metric):
102 """Populate the 'task' embedded message field of a metric protobuf.
103
104 Args:
105 metric (metrics_pb2.MetricsData): the metric proto to be populated.
106 """
107 metric.task.service_name = self.service_name
108 metric.task.job_name = self.job_name
109 metric.task.data_center = self.region
110 metric.task.host_name = self.hostname
111 metric.task.task_num = self.task_num
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698