# -*- python -*-
# ex: set syntax=python:

# Extend paths to allow loading zorg and config modules.
import os, sys
# All the configuration files are under the directory
# where master.cfg file is.
cfg_path = os.path.abspath(os.path.dirname(__file__))
if cfg_path not in sys.path:
  sys.path.append(cfg_path)
# Zorg is 3 levels up.
path = os.path.abspath(
         os.path.join(cfg_path, '..', '..', '..')
       )
if path not in sys.path:
  sys.path.append(path)

##print(">>> sys.path={}}".format(sys.path)) # TODO: Remove this later.

# This is the dictionary that the buildmaster pays attention to. We also use
# a shorter alias to save typing.
c = BuildmasterConfig = {}
c['buildbotNetUsageData'] = None

import config

## TODO: Figure out what to do with the reloading.
# Reload stuff automatically.
#
# FIXME: Find better way.
#reload(config.workers)
#reload(config.builders)
#reload(config.status)
#reload(config)

####### Workers

c['workers'] = config.workers.get_all()

c['protocols'] = {'pb': {'port': 9990}}

####### CHANGESOURCES

##from buildbot.changes.pb import PBChangeSource
from zorg.buildbot.changes.llvmgitpoller import LLVMPoller
from zorg.buildbot.process.buildrequest import collapseRequests

c['change_source'] = []
# TODO: Do we want to support a push mode for the changes? Probably not.
#c['change_source'].append(PBChangeSource())
c['change_source'].append(
    LLVMPoller(repourl='https://github.com/llvm/llvm-project.git',
               workdir='gitpoller-workdir',
               pollinterval=120))

c['collapseRequests'] = collapseRequests

####### BUILDERS

from buildbot.plugins import util

c['builders'] = builders = [
  util.BuilderConfig(**b) for b in config.builders.all
]

####### SCHEDULERS

c['schedulers'] = config.schedulers.getSingleBranchSchedulers(
                                        c['builders'])
c['schedulers'].extend(config.schedulers.getForceSchedulers(
                                        c['builders']))

####### BUILDBOT SERVICES

# 'services' is a list of BuildbotService items like reporter targets. The
# status of each build will be pushed to these targets. buildbot/reporters/*.py
# has a variety to choose from, like IRC bots.

# Configure MailNotifier, IRC, buildbot.reporters.github.GitHubStatusPush, buildbot.reporters.github.GitHubCommentPush
c['services'] = config.status.getReporters()

####### PROJECT IDENTITY

c['title'] = config.options.get('Buildbot', 'title')
c['titleURL'] = config.options.get('Buildbot', 'title_url')
c['buildbotURL'] = config.options.get('Buildbot', 'my_url')

# minimalistic config to activate new web UI
c['www'] = dict(port=8011,
                plugins=dict(waterfall_view={}, console_view={}, grid_view={}), # TODO: badges
                default_page='console',
                auth=config.auth.getAuth(),
                authz=config.auth.getAuthz(),
                #logRotateLength=
                #maxRotatedFiles=
                #versions=
            )

####### DB URL

c['db'] = {
    'db_url' : config.options.get('Database', 'db_url'),
}

####### RESOURCE USAGE

from datetime import timedelta

# TODO: Figure out the "changeHorizon" value for our usage.
#c["changeHorizon"] = 300

# configure a janitor which will delete all logs older than one month,
# and will run on sundays at noon
# TODO: Recheck the setting for the production bot.
c['configurators'] = [util.JanitorConfigurator(
    logHorizon=timedelta(weeks=4), # Roughly once a month.
    hour=12,
    dayOfWeek=6
)]
