#!/usr/bin/python3
'''
storwize checker

User creation:
  mkuser -name nagios -usergrp Monitor -keyfile /tmp/kf

Docs:
ftp://ftp.ca.net/docs/IBM/IBM%20Docs/IBM%20System%20Storage%20SAN%20Volume%20Controller%20-%20SG24-6423-04.pdf

'''

import sys, time, os
import xml.etree.ElementTree as ET

TMPDIR = "/tmp"
HOST, ID, NT = sys.argv[1:4]

class SCP(object):
  def __init__(self, hostname, id):
      dt = time.strftime("%g%m%d_%H%M*", time.localtime(time.time()-60))
      cmd = "scp -q -o ConnectTimeout=10 -o StrictHostKeyChecking=no %s:/dumps/iostats/N*_stats_%s_%s %s/" \
            % (hostname, id, dt, TMPDIR)
      #print(cmd)
      os.system(cmd)
  def files(self, char="v"):
      return sorted([
        TMPDIR + "/" + x
        for x in os.listdir(TMPDIR)
        if x.startswith("N%s_" % char)
      ])

class NxParser(object):
  def __init__(self, filename):
      self.tree = ET.parse(filename)
      self.root = self.tree.getroot()
  def counters(self):
      ret = {}
      for vdsk in self.root:
        d = vdsk.attrib
        ret[d['id'] or d['idx']] = dict(
          iops = dict(read=long(d['ro']), write=long(d['wo'])),
          bytes = dict(read=long(d['rb']), write=long(d['wb']))
        )
      return ret
  def perf_data(self, type="bytes"):
      ret = []
      for key, value in self.counters().items():
        ret.append("%s_r=%dc %s_w=%dc" % (
          key, value[type]['read'],
          key, value[type]['write']
        ))
      return " ".join(ret)

if __name__ == "__main__":
  scp = SCP(HOST, ID)

  #from pprint import pprint
  #pprint(NxParser(scp.files('v')[-1]).counters())

  files = scp.files(NT[0])

  if not files:
    print("CRITICAL - unable to copy data")
    sys.exit(2)

  data = NxParser(files[-1])
  print("OK - %d %ss|%s" % (
    len(data.counters()), NT, data.perf_data()
  ))
  sys.exit(0)
