| @@ 351-385 (lines=35) @@ | ||
| 348 | for mname in cols: |
|
| 349 | mval = int(val.popleft()) |
|
| 350 | mstr = "{0}.{1}".format(key, mname) |
|
| 351 | dval = self.calc.per_second(mstr, mval, ts) |
|
| 352 | result.add(plumd.Int(mstr, dval)) |
|
| 353 | return result |
|
| 354 | ||
| 355 | ||
| 356 | def proc_net_dev(self): |
|
| 357 | """Return network interface metrics from proc file net/dev. |
|
| 358 | ||
| 359 | Add entries to the configuration value 'net_dev_re' to skip |
|
| 360 | any network interfaces that match the regular expression. |
|
| 361 | ||
| 362 | :rtype: plumd.Result |
|
| 363 | """ |
|
| 364 | cols = self.config.get('net_dev_cols') |
|
| 365 | result = plumd.Result("net") |
|
| 366 | fname = "{0}/net/dev".format(self.proc_path) |
|
| 367 | dat = {} |
|
| 368 | # read and process /proc/stat |
|
| 369 | try: |
|
| 370 | dat = get_file_map(fname, 0, 0) |
|
| 371 | except Exception as e: |
|
| 372 | tb = traceback.format_exc() |
|
| 373 | self.log.error("proc_net_dev: exception: {0}: {1}".format(e, tb)) |
|
| 374 | return result |
|
| 375 | ts = time.time() |
|
| 376 | for key, val in dat.items(): |
|
| 377 | key = key.replace(":", "") |
|
| 378 | if self.net_dev_re.match(key): |
|
| 379 | continue |
|
| 380 | if len(val) < len(cols): |
|
| 381 | #self.log.error("proc_net_dev: invalid entry: {0}".format(val)) |
|
| 382 | continue |
|
| 383 | for mname in cols: |
|
| 384 | if len(val) < 1: |
|
| 385 | break |
|
| 386 | mval = int(val.popleft()) |
|
| 387 | mstr = "{0}.{1}".format(key, mname) |
|
| 388 | dval = self.calc.per_second(mstr, mval, ts) |
|
| @@ 319-348 (lines=30) @@ | ||
| 316 | return result |
|
| 317 | pidle = float(idle)/float(up) * 100 / multiprocessing.cpu_count() |
|
| 318 | result.add(plumd.Float("up", up)) |
|
| 319 | result.add(plumd.Float("idle", idle)) |
|
| 320 | result.add(plumd.Float("idle_percent", pidle)) |
|
| 321 | return result |
|
| 322 | ||
| 323 | ||
| 324 | def proc_diskstats(self): |
|
| 325 | """Return disk io metrics from proc file diskstats. |
|
| 326 | ||
| 327 | :rtype: plumd.Result |
|
| 328 | """ |
|
| 329 | # times in ms |
|
| 330 | cols = self.config.get('diskstats_cols') |
|
| 331 | result = plumd.Result("diskstats") |
|
| 332 | fname = "{0}/diskstats".format(self.proc_path) |
|
| 333 | dat = {} |
|
| 334 | # read and process /proc/stat |
|
| 335 | try: |
|
| 336 | dat = get_file_map(fname, 2, 0) |
|
| 337 | except Exception as e: |
|
| 338 | tb = traceback.format_exc() |
|
| 339 | self.log.error("proc_diskstats: exception: {0}: {1}".format(e, tb)) |
|
| 340 | return result |
|
| 341 | ts = time.time() |
|
| 342 | for key, val in dat.items(): |
|
| 343 | if self.diskstats_dev_re.match(key): |
|
| 344 | continue |
|
| 345 | if len(val) != 13: |
|
| 346 | self.log.error("proc_diskstats: invalid entry: {0}".format(val)) |
|
| 347 | continue |
|
| 348 | for mname in cols: |
|
| 349 | mval = int(val.popleft()) |
|
| 350 | mstr = "{0}.{1}".format(key, mname) |
|
| 351 | dval = self.calc.per_second(mstr, mval, ts) |
|