#!/usr/bin/env python
# Copyright 2014-2018 CERN for the benefit of the ATLAS collaboration.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Authors:
# - Cedric Serfon, <cedric.serfon@cern.ch>, 2018
#
# PY3K COMPATIBLE

'''
Minos Daemon :
Minos is the name of one of the judge on the underworld in the greek mythology.
The role of the daemon is get as input the list of PFNs declared bad
and to class them into 2 categories :
- The ones temporary available
- The ones that have a real problem and that will need to be recovered by the necromancer
'''

import argparse
import signal

from rucio.daemons.badreplicas.minos import run, stop


def get_parser():
    """
    Returns the argparse parser.
    """
    parser = argparse.ArgumentParser()
    parser.add_argument("--run-once", action="store_true", default=False, help='Runs one loop iteration')
    parser.add_argument("--threads", action="store", default=1, type=int, help='Concurrency control: number of threads')
    parser.add_argument("--bulk", action="store", default=1000, type=int, help='Bulk control: number of requests per cycle')
    parser.add_argument('--sleep-time', action="store", default=60, type=int, help='Seconds to sleep if few requests')
    return parser


if __name__ == "__main__":

    # Bind our callback to the SIGTERM signal and run the daemon:
    signal.signal(signal.SIGTERM, stop)

    parser = get_parser()
    args = parser.parse_args()
    try:
        run(threads=args.threads, bulk=args.bulk, once=args.run_once, sleep_time=args.sleep_time)
    except KeyboardInterrupt:
        stop()
