#!/bin/bash
#
# Author:
#     James Casey <james.casey@cern.ch>
#     Logic taken from yaim component "config_gip"
#
# Provide LFC service information for BDII
#

base=$(cd $(dirname $0); pwd)

USAGE=$(basename $0)"  --site site_name [--alias alias_name] [--local \"VO1 VO2\"] [--central \"VO3 VO4\"] [--verbose]"

TEMP=$(getopt -o hc:l:s:v --long central:,local:,alias:,site:,verbose -- "$@")
eval set -- "$TEMP"


# by default the local and central VO lists are empty
LFC_LOCAL=""
LFC_CENTRAL=""
# by default, the hostname to use is the current host
LFC_HOST=`hostname -f`
# by default quiet operation
VERBOSE='false'
# by default, no site-name
SITE_NAME=""

while true; do
    case "$1" in
        -a|--alias)
            shift
            LFC_HOST="$1"
            shift
            ;;
        -s|--site)
            shift
            SITE_NAME="$1"
            shift
            ;;
        -l|--local)
            shift
            LFC_LOCAL="$LFC_LOCAL $1"
            shift
            ;;
        -c|--central)
            shift
            LFC_CENTRAL="$LFC_CENTRAL $1"
            shift
            ;;
        -v|--verbose)
            VERBOSE='true'
            shift
            ;;
        -h|--help)
            echo $USAGE
            exit
            ;;
        --)
            shift
            break
            ;;
        *)
            echo "Unknown option '$1'"
            exit
            ;;
    esac
done

if [ -z $SITE_NAME ] ; then
    echo "ERROR : No site name defined" 1>&2;
    exit 1;
fi


#######################################################################
# system parameters
START_TIME=$(stat -c %z /var/run/lfcdaemon.pid  2>/dev/null)
LFC_VERSION=$(rpm -q --qf '%{VERSION}' lcg-dm-common) # lcg-dm-common version is always the same as LFC version

if [ ! $? == 0 ]; then
    LFC_VERSION=""
fi
# Now create ldif fragment for central catalog

if [ "$LFC_CENTRAL" ]; then
    
    cat <<EOF
dn: GlueServiceUniqueID=http://${LFC_HOST}:8085/,mds-vo-name=resource,o=grid
objectClass: GlueTop
objectClass: GlueService
GlueServiceUniqueID: http://${LFC_HOST}:8085/
GlueServiceName: ${SITE_NAME}-lfc-dli
GlueServiceType: data-location-interface
GlueServiceEndpoint: http://${LFC_HOST}:8085/
GlueServiceURI: http://${LFC_HOST}:8085/
GlueServiceAccessPointURL: http://${LFC_HOST}:8085/
GlueServiceStatus: OK
GlueServiceStatusInfo: No Problems
GlueServiceWSDL: unset
GlueServiceSemantics: unset
GlueForeignKey: GlueSiteUniqueID=${SITE_NAME}
EOF
    if [ -n "$START_TIME" ]; then
	echo "GlueServiceStartTime: ${START_TIME}"

    fi
    if [ -n "$LFC_VERSION" ]; then
	echo "GlueServiceVersion: ${LFC_VERSION}"
    fi
    for VO in $LFC_CENTRAL; do
	echo "GlueServiceOwner: $VO"
	echo "GlueServiceAccessControlRule: $VO"
    done
    
    echo 
    
    cat <<EOF
dn: GlueServiceUniqueID=${LFC_HOST},mds-vo-name=resource,o=grid
objectClass: GlueTop
objectClass: GlueService
GlueServiceUniqueID: ${LFC_HOST}
GlueServiceName: ${SITE_NAME}-lfc
GlueServiceType: lcg-file-catalog
GlueServiceEndpoint: ${LFC_HOST}
GlueServiceURI: ${LFC_HOST}
GlueServiceAccessPointURL: ${LFC_HOST}
GlueServiceStatus: OK
GlueServiceStatusInfo: No Problems
GlueServiceWSDL: unset
GlueServiceSemantics: unset
GlueForeignKey: GlueSiteUniqueID=${SITE_NAME}
EOF

    if [ -n "$START_TIME" ]; then
	echo "GlueServiceStartTime: ${START_TIME}"

    fi
    if [ -n "$LFC_VERSION" ]; then
	echo "GlueServiceVersion: ${LFC_VERSION}"
    fi
    for VO in $LFC_CENTRAL; do
	echo "GlueServiceOwner: $VO"
	echo "GlueServiceAccessControlRule: $VO"
    done
    
    echo
    
fi

if [ "$LFC_LOCAL" ]; then
    
    cat <<EOF
dn: GlueServiceUniqueID=local-http://${LFC_HOST}:8085/,mds-vo-name=resource,o=grid
objectClass: GlueTop
objectClass: GlueService
GlueServiceUniqueID: local-http://${LFC_HOST}:8085/
GlueServiceName: ${SITE_NAME}-lfc-dli
GlueServiceType: local-data-location-interface
GlueServiceEndpoint: http://${LFC_HOST}:8085/
GlueServiceURI: http://${LFC_HOST}:8085/
GlueServiceAccessPointURL: http://${LFC_HOST}:8085/
GlueServiceStatus: OK
GlueServiceStatusInfo: No Problems
GlueServiceWSDL: unset
GlueServiceSemantics: unset
GlueForeignKey: GlueSiteUniqueID=${SITE_NAME}
EOF

    if [ -n "$START_TIME" ]; then
	echo "GlueServiceStartTime: ${START_TIME}"

    fi
    if [ -n "$LFC_VERSION" ]; then
	echo "GlueServiceVersion: ${LFC_VERSION}"
    fi
    for VO in $LFC_LOCAL; do
	echo "GlueServiceOwner: $VO"
	echo "GlueServiceAccessControlRule: $VO"
    done
    
    echo
    
    cat <<EOF

dn: GlueServiceUniqueID=local-${LFC_HOST},mds-vo-name=resource,o=grid
objectClass: GlueTop
objectClass: GlueService
GlueServiceUniqueID: local-${LFC_HOST}
GlueServiceName: ${SITE_NAME}-lfc
GlueServiceType: lcg-local-file-catalog
GlueServiceEndpoint: ${LFC_HOST}
GlueServiceURI: ${LFC_HOST}
GlueServiceAccessPointURL: ${LFC_HOST}
GlueServiceStatus: OK
GlueServiceStatusInfo: No Problems
GlueServiceWSDL: unset
GlueServiceSemantics: unset
GlueForeignKey: GlueSiteUniqueID=${SITE_NAME}
EOF

    if [ -n "$START_TIME" ]; then
	echo "GlueServiceStartTime: ${START_TIME}"

    fi
    if [ -n "$LFC_VERSION" ]; then
	echo "GlueServiceVersion: ${LFC_VERSION}"
    fi
    for VO in $LFC_LOCAL; do
	echo "GlueServiceOwner: $VO"
	echo "GlueServiceAccessControlRule: $VO"
    done
    
fi
