#! /usr/bin/python

import sys
import os

from skyd_func import skyd_read_conf
from tiny import start

def skyd_state(conf_file,state):
	"""
#+
# NAME:
#	skyd_state
# PURPOSE:
#	Displays information about skyd_wait.py state
# CALLING SEQUENCE:
#	skyd_state.py [-cffile=<cffile> -state=<state>]
#	skyd_state(conf_file,state)
# INPUTS:
#	conf_file	string		name of configuration file
#					default: $SKYD/cf/skyd_<host>.cf
#	state		string		any on of the possible states of an orbit
#					('make','busy','skip','pass','done')
#					default: 'busy'
# PROCEDURE:
#	Accesses the configuration file and all orbit catalogues
#	specified in the configuration file.
# MODIFICATION HISTORY:
#	JAN-2006, Paul Hick (UCSD/CASS)
#	NOV-2006, Paul Hick (UCSD/CASS; pphick@ucsd.edu)
#		Added counts for each version number for "done" orbits
#-
	"""
	status = dict ( [ ('number', 0), ('message', '') ])

	# Read the configuration file (there should be one for each computer
	# that we plan to run the daemon on).

	status = skyd_read_conf(conf_file,False,status)

	if status['number'] != 0:
	    return

	all_count = 0

	conf = status.pop('conf')

	# Get a list of catalogues in conf file 

	catalogue = []
	orbit_range = dict()

	for key in conf.keys():

		if key.find('group_') != 0:
			continue
		#if conf[key]['done'] == '1':
		#	continue

		cat = conf[key]['catalogue']
		if catalogue.count(cat) == 0:
			catalogue.append(cat)
			orbit_range[cat] = []
		min_orbit = int(conf[key]['min_orbit'])
		max_orbit = int(conf[key]['max_orbit'])
		all_count = all_count+(max_orbit-min_orbit+1)
		orbit_range[cat].append([min_orbit,max_orbit])

	count = dict([('make',0),('busy',0),('done',0),('skip',0),('pass',0)])
	versions = []
	keys = count.keys()

	for cat in catalogue:
		ff = os.path.expandvars(cat)
		if not os.path.isfile(ff):
			continue

		print cat 
		lines = (open(ff,'r')).read().split('\n')
		for line in lines:
			if len(line) == 0:
				continue

			if line.find(state) != -1:
				print line

			parts = line.split()
			orbit = int(parts[0])

			for r in orbit_range[cat]:

				if orbit < r[0] or orbit > r[1]:
					continue

				for key in keys:
					if line.find(key) == -1:
						continue
					count[key] = count[key]+1
					if line.find('done') == -1:
						continue

					if len(parts) >= 6:
						versions.append(parts[-1])
					else:
						versions.append('0.00')

	print ''
	print ''
	for key in keys:
		if count[key] != 0:
			print '%6d/%6d orbits "%s"'%(count[key],all_count,key)

		if key != 'done':
			continue

		while len(versions) > 0:

			test_version = versions[0]
			kver = 0
			iver = 0
			nver = len(versions)

			while iver < nver:

				if versions[iver] == test_version:
					kver += 1
					del versions[iver]
					nver -= 1
				else:
					iver += 1

			print '%6d %6s orbits "done" with version %s'%(kver,'',test_version)

	return

if __name__ == '__main__':

	conf_file = start( '-cffile=',sys.argv )
	if conf_file == '':
		boss = os.environ['HOSTNAME'].split('.')[0]
		if not os.environ.has_key('SKYD'):
			print 'Env var SKYD not defined'
			sys.exit(1)
		conf_file = os.path.join(os.environ['SKYD'],'cf','skyd_'+boss+'.cf')

	state = start( '-state',sys.argv )
	if state == '':
		state = 'busy'

	skyd_state(conf_file,state)

	sys.exit(0)
