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

Side by Side Diff: utils/monitor.py

Issue 3294021: Increased threads to 50, added update timestamp for HTML pages. (Closed) Base URL: ssh://git@chromiumos-git//autotest.git
Patch Set: Increased timeout when creating graphics. Created 10 years, 3 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # 2 #
3 # Copyright 2010 Google Inc. All Rights Reserved. 3 # Copyright 2010 Google Inc. All Rights Reserved.
4 # 4 #
5 # Licensed under the Apache License, Version 2.0 (the "License"); 5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License. 6 # you may not use this file except in compliance with the License.
7 # You may abtain a copy of the license at 7 # You may abtain a copy of the license at
8 # 8 #
9 # http://www.apache.org/licenses/LICENSE-2.0 9 # http://www.apache.org/licenses/LICENSE-2.0
10 # 10 #
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 """ 149 """
150 Args: 150 Args:
151 hostname: string, hostname of AutoTest host. 151 hostname: string, hostname of AutoTest host.
152 """ 152 """
153 self.h = hostname 153 self.h = hostname
154 self.client = paramiko.SSHClient() 154 self.client = paramiko.SSHClient()
155 self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 155 self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
156 156
157 157
158 def run(self): 158 def run(self):
159 TB.hosts[self.h]['time'] = strftime(
160 '%d%b%Y %H:%M:%S', localtime())
161 try: 159 try:
162 self.client.connect(self.h, username='root', 160 self.client.connect(self.h, username='root',
163 key_filename=TB.privkey, timeout=TIMEOUT) 161 key_filename=TB.privkey, timeout=TIMEOUT)
164 TB.hosts[self.h]['status'] = True 162 TB.hosts[self.h]['status'] = True
165 except Exception, e: 163 except Exception, e:
166 TB.logger.error('Host %s: %s', self.h, e) 164 TB.logger.error('Host %s: %s', self.h, e)
167 TB.hosts[self.h]['status'] = False 165 TB.hosts[self.h]['status'] = False
168 finally: 166 finally:
169 if TB.hosts[self.h]['status']: 167 if TB.hosts[self.h]['status']:
170 self.ReadRelease() 168 self.ReadRelease() # Must be done before UpdateRelease().
171 self.ReadFirmware() 169 self.ReadFirmware()
172 self.UpdateRelease() # Must be done before ReadResources(). 170 self.UpdateRelease() # Must be done before ReadResources().
173 if TB.hosts[self.h]['status']: 171 if TB.hosts[self.h]['status']:
174 self.ReadResources() 172 self.ReadResources()
175 TB.logger.debug('Closing client for %s', self.h) 173 TB.logger.debug('Closing client for %s', self.h)
176 self.client.close() 174 self.client.close()
175 TB.hosts[self.h]['time'] = strftime(
176 '%d%b%Y %H:%M:%S', localtime())
177 177
178 178
179 def ReadRelease(self): 179 def ReadRelease(self):
180 """Get the Chrome OS Release version.""" 180 """Get the Chrome OS Release version."""
181 # The PTR key will mark the current version. 181 # The PTR key will mark the current version.
182 182
183 cmd = 'cat /etc/lsb-release' 183 cmd = 'cat /etc/lsb-release'
184 try: 184 try:
185 stdin, stdout, stderr = self.client.exec_command(cmd) 185 stdin, stdout, stderr = self.client.exec_command(cmd)
186 for line in stdout: 186 for line in stdout:
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 # This means the release file has the wrong format, so 259 # This means the release file has the wrong format, so
260 # we'll just write a new one with current values. 260 # we'll just write a new one with current values.
261 update_file = True 261 update_file = True
262 lines.pop(lines.index(line)) 262 lines.pop(lines.index(line))
263 else: 263 else:
264 # If we get here than it's probably a blank line. 264 # If we get here than it's probably a blank line.
265 update_file = True 265 update_file = True
266 lines.pop(lines.index(line)) 266 lines.pop(lines.index(line))
267 267
268 if update_file: 268 if update_file:
269 TB.logger.info('Updating %s', relfile) 269 TB.logger.debug('Updating %s', relfile)
270 shutil.move(relfile, tmpfile) 270 shutil.move(relfile, tmpfile)
271 # Put the most recent update in the new file, and make the 271 # Put the most recent update in the new file, and make the
272 # PTR key to point to it. 272 # PTR key to point to it.
273 lines.append('%s=%s\n' % (TB.time, 273 lines.append('%s=%s\n' % (TB.time,
274 TB.hosts[self.h][item]['PTR'])) 274 TB.hosts[self.h][item]['PTR']))
275 lines.append('PTR=%s' % TB.hosts[self.h][item]['PTR']) 275 lines.append('PTR=%s' % TB.hosts[self.h][item]['PTR'])
276 try: 276 try:
277 rf = open(relfile, 'w') 277 rf = open(relfile, 'w')
278 for line in lines: 278 for line in lines:
279 rf.write(line) 279 rf.write(line)
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 t.start() 413 t.start()
414 414
415 # Fill the requests queue with AutoTest host objects. 415 # Fill the requests queue with AutoTest host objects.
416 for host in self.afe_hosts: 416 for host in self.afe_hosts:
417 TB.logger.debug('Placing %s in host queue.', host.hostname) 417 TB.logger.debug('Placing %s in host queue.', host.hostname)
418 TB.q.put(host) 418 TB.q.put(host)
419 419
420 420
421 if TB.graph: 421 if TB.graph:
422 # Graphing takes much longer, so increase the max runtime. 422 # Graphing takes much longer, so increase the max runtime.
423 maxtime = RUNTIME * 5 423 maxtime = RUNTIME * 6
424 else: 424 else:
425 maxtime = RUNTIME 425 maxtime = RUNTIME
426 # Queue.join() will wait for all jobs in the queue to finish, or 426 # Queue.join() will wait for all jobs in the queue to finish, or
427 # until the timeout value is reached. Timeout is needed because 427 # until the timeout value is reached. Timeout is needed because
428 # sometimes the paramiko client will hang. 428 # sometimes the paramiko client will hang.
429 TB.logger.debug('Joining run queue.') 429 TB.logger.debug('Joining run queue.')
430 TB.q.join(timeout=maxtime) 430 TB.q.join(timeout=maxtime)
431 TB.logger.info('%s hosts left in host queue', TB.q.qsize()) 431 TB.logger.info('%s hosts left in host queue', TB.q.qsize())
432 432
433 LogLevel = TB.logger.getEffectiveLevel() 433 LogLevel = TB.logger.getEffectiveLevel()
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
744 f.write('<td>%s<br><a href=%s.html>' % (r, r)) 744 f.write('<td>%s<br><a href=%s.html>' % (r, r))
745 f.write('<img src=%s%s.png width=475 height=250></a></td>' % ( 745 f.write('<img src=%s%s.png width=475 height=250></a></td>' % (
746 r,k)) 746 r,k))
747 if newrow: 747 if newrow:
748 newrow = False 748 newrow = False
749 else: 749 else:
750 f.write('</tr>\n') 750 f.write('</tr>\n')
751 newrow = True 751 newrow = True
752 f.write('</table><p>\n') 752 f.write('</table><p>\n')
753 f.write('</center>\n') 753 f.write('</center>\n')
754 f.write('<H5>Last Update: %s</H5>' % TB.hosts[hostname]['time'])
754 f.write('</BODY></HTML>') 755 f.write('</BODY></HTML>')
755 f.close() 756 f.close()
756 os.chmod(pathname[k], 0644) 757 os.chmod(pathname[k], 0644)
757 if not os.path.isfile(index_file): 758 if not os.path.isfile(index_file):
758 os.symlink(pathname[TB.rrdtimes[0]], index_file) 759 os.symlink(pathname[TB.rrdtimes[0]], index_file)
759 760
760 # Create HTML files for each resource for all time periods. 761 # Create HTML files for each resource for all time periods.
761 for r in resource_list: 762 for r in resource_list:
762 rrdfile = os.path.join(rrd_dir, r + '.html') 763 rrdfile = os.path.join(rrd_dir, r + '.html')
763 f = open(rrdfile, 'w') 764 f = open(rrdfile, 'w')
764 f.write('<HTML><HEAD>') 765 f.write('<HTML><HEAD>')
765 f.write('<center><TITLE>%s %s Resources</TITLE></HEAD>' % ( 766 f.write('<center><TITLE>%s %s Resources</TITLE></HEAD>' % (
766 hostname, r)) 767 hostname, r))
767 f.write('<BODY><H1>%s %s Resources</H1>' % (hostname, r)) 768 f.write('<BODY><H1>%s %s Resources</H1>' % (hostname, r))
768 for i in TB.releases: 769 for i in TB.releases:
769 f.write('<H4>%s: %s</H4>' % (i, TB.hosts[hostname][i]['PTR'])) 770 f.write('<H4>%s: %s</H4>' % (i, TB.hosts[hostname][i]['PTR']))
770 f.write('<table border=5 bgcolor=#B5B5B5>') 771 f.write('<table border=5 bgcolor=#B5B5B5>')
771 f.write('<tr>') 772 f.write('<tr>')
772 for h in TB.rrdtimes: 773 for h in TB.rrdtimes:
773 f.write('<td><a href="#%s"><b>%s</b></a>' % (h, h)) 774 f.write('<td><a href="#%s"><b>%s</b></a>' % (h, h))
774 f.write('</table>') 775 f.write('</table>')
775 f.write('<HR>') 776 f.write('<HR>')
776 f.write('<table border=1 bgcolor=#EEEEEE>') 777 f.write('<table border=1 bgcolor=#EEEEEE>')
777 for h in TB.rrdtimes: 778 for h in TB.rrdtimes:
778 f.write('<tr><td><a name="%s"><img src=%s%s.png>' % (h, r, h)) 779 f.write('<tr><td><a name="%s"><img src=%s%s.png>' % (h, r, h))
779 f.write('</a></td></tr>\n') 780 f.write('</a></td></tr>\n')
780 f.write('</table><p>\n') 781 f.write('</table><p>\n')
781 f.write('</center>\n') 782 f.write('</center>\n')
783 f.write('<H5>Last Update: %s</H5>' % TB.hosts[hostname]['time'])
782 f.write('</BODY></HTML>') 784 f.write('</BODY></HTML>')
783 f.close() 785 f.close()
784 os.chmod(rrdfile, 0644) 786 os.chmod(rrdfile, 0644)
785 787
786 788
787 def ParseBattery(self, h, k): 789 def ParseBattery(self, h, k):
788 """Convert /proc/acpi/battery/BAT0/state to a list of strings. 790 """Convert /proc/acpi/battery/BAT0/state to a list of strings.
789 791
790 Args: 792 Args:
791 h: string, hostname of host in AutoTest. 793 h: string, hostname of host in AutoTest.
(...skipping 926 matching lines...) Expand 10 before | Expand all | Expand 10 after
1718 parser.add_option('--logfile', 1720 parser.add_option('--logfile',
1719 help='name of logfile [default: %default]', 1721 help='name of logfile [default: %default]',
1720 default='monitor.log', 1722 default='monitor.log',
1721 dest='logfile') 1723 dest='logfile')
1722 parser.add_option('--log_to_stdout', 1724 parser.add_option('--log_to_stdout',
1723 help='Send output to StdOut [default: %default]', 1725 help='Send output to StdOut [default: %default]',
1724 default=False, 1726 default=False,
1725 dest='log_to_stdout') 1727 dest='log_to_stdout')
1726 parser.add_option('--threads', 1728 parser.add_option('--threads',
1727 help='Number of threads to create [default: %default]', 1729 help='Number of threads to create [default: %default]',
1728 default=25, 1730 default=50,
1729 dest='threads') 1731 dest='threads')
1730 parser.add_option('--update', 1732 parser.add_option('--update',
1731 help='Collect data from hosts [default: %default]', 1733 help='Collect data from hosts [default: %default]',
1732 default=True, 1734 default=True,
1733 dest='update') 1735 dest='update')
1734 parser.add_option('--url', 1736 parser.add_option('--url',
1735 help='URL for landing page [default: %default]', 1737 help='URL for landing page [default: %default]',
1736 default='http://www/~chromeos-test/systemhealth/', 1738 default='http://www/~chromeos-test/systemhealth/',
1737 dest='url') 1739 dest='url')
1738 1740
(...skipping 12 matching lines...) Expand all
1751 sysmon.BuildLandingPage() 1753 sysmon.BuildLandingPage()
1752 runtime = time() - start 1754 runtime = time() - start
1753 endtime = strftime('%H:%M:%S', localtime()) 1755 endtime = strftime('%H:%M:%S', localtime())
1754 TB.logger.info('End Time: %s', endtime) 1756 TB.logger.info('End Time: %s', endtime)
1755 TB.logger.info('Time of run: %s seconds', runtime) 1757 TB.logger.info('Time of run: %s seconds', runtime)
1756 TB.logger.info('Ran with %d threads', TB.thread_num) 1758 TB.logger.info('Ran with %d threads', TB.thread_num)
1757 1759
1758 1760
1759 if __name__ == '__main__': 1761 if __name__ == '__main__':
1760 main(sys.argv) 1762 main(sys.argv)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698