#!/usr/local/bin/python
'''Report on the status of all of the clients. '''
from __future__ import print_function
import bacula_tools

bacula_config_object = bacula_tools.Bacula_Factory()

# This loop will iterate through the pword table
dirlist = {}
prevent_duplicates = {}
select_query = '''
SELECT obj_id, obj_type, director_id, director_type
  FROM pwords
  ORDER BY obj_type, director_type
'''
for row in bacula_config_object.do_sql(select_query):
    if prevent_duplicates.has_key((row[0], row[1])):
        continue
    prevent_duplicates[(row[0], row[1])] = True
    if row[1] == bacula_tools.Client.IDTAG:
        obj = bacula_tools.Client().search(row[0])
        comm = bacula_tools.FDaemon
    elif row[1] == bacula_tools.Storage.IDTAG:
        obj = bacula_tools.Storage().search(row[0])
        comm = bacula_tools.SDaemon
    else:
        print('Unhandled object type:', row[1])

    # Make sure there's a Director already allocated.
    if not dirlist.has_key((row[2], row[3])):
        if row[3] == bacula_tools.Director.IDTAG:
            klass = bacula_tools.Director
        elif row[3] == bacula_tools.Console.IDTAG:
            klass = bacula_tools.Console
        else:
            print('Unhandled director type:', row[1])
            continue
        dirlist[(row[2], row[3])] = klass().search(row[2])

    current_director = dirlist[(row[2], row[3])]
    password = bacula_tools.PasswordStore(obj, current_director)
    try:
        connection = comm(
            obj[bacula_tools.ADDRESS], password.password, current_director[bacula_tools.NAME])
        connection.auth()
        print(connection.version())
    except:
        print('%s: connection refused (firewall or dead)' %
              obj[bacula_tools.NAME])

for row in bacula_config_object.do_sql('SELECT id from %s order by id ASC' % bacula_tools.Director.table):
    obj = bacula_tools.Director().search(row[0])
    try:
        connection = bacula_tools.BDirector(obj)
        connection.auth()
        print(connection.version())
    except:
        print('%s: connection refused (firewall or dead)' %
              obj[bacula_tools.NAME])

exit()
