#!/usr/libexec/platform-python

import os
import re
import sys
import time
import socket
import datetime
import optparse

import gratia.common.Gratia as Gratia
import gratia.dcache_storage.GratiaConnector as GratiaConnector
import gratia.dcache_storage.XmlBuilder as XmlBuilder

# Bootstrap hadoop
if 'JAVA_HOME' not in os.environ:
    os.environ['JAVA_HOME'] = '/usr/java/default'

class Config(Gratia.ProbeConfiguration):

      def __init__(self):
          Gratia.ProbeConfiguration.__init__(self)

      def __getattr__(self,name):
          return self.getConfigAttribute(name)

def configure():
    cp = Config()

    os.environ['CLASSPATH'] = '/usr/share/java/xalan-j2.jar:/usr/share/java/xalan-j2-serializer.jar'

    return cp

def _get_se(cp):
    try:
        return cp.SiteName
    except:
        pass
    try:
        return socket.getfqdn()
    except:
        return 'Unknown'

_my_se = None
def get_se(cp):
    global _my_se
    if _my_se:
        return _my_se
    _my_se = _get_se(cp)
    return _my_se


def main():
    cp = configure()

    gConnector = GratiaConnector.GratiaConnector(cp)

    dCacheUrl = cp.InfoProviderUrl

    poolsUsage = None
    try:
      poolsUsage = cp.ReportPoolUsage
    except:
      pass

    if ( dCacheUrl == None ):
       raise Exception("Config file does not contain dCacheInfoUrl attribute")
  
    ynMap = { 'no' : 1 , 'false' : 1 , 'n':1 , '0' : 1 }
    noPoolsArg = ""
 
    if ( poolsUsage != None and poolsUsage.lower() in ynMap):
       noPoolsArg = "-PARAM nopools 1"

    timeNow = int(time.time())

    cmd = "java  org.apache.xalan.xslt.Process %s -PARAM now %d -PARAM SE %s -XSL /usr/share/gratia/dCache-storage/create_se_record.xsl -IN %s " % ( noPoolsArg, timeNow, get_se(cp), dCacheUrl )

    fd = os.popen(cmd)

    result = XmlBuilder.Xml2ObjectBuilder(fd)
     
    for storageRecord in result.get().get():
       gConnector.send(storageRecord)

if __name__ == '__main__':
    main()
