Ejemplo n.º 1
0
        monkeypatch(BuilderStatus, builder_setstate_events)
    else:
        monkeypatch(BuilderStatus, builder_setstate_noevents)
    monkeypatch(BuildStepStatus, buildstep_setstate)

    builders = []
    for a in args:
        if os.path.exists(os.path.join(a, "builder")):
            builders.append(a)
        else:
            for d in os.listdir(a):
                p = os.path.join(a, d)
                if os.path.exists(os.path.join(a, d, "builder")):
                    builders.append(p)

    session = model.connect(options.database)()

    started = time.time()
    try:
        last_time = float(open("last_time.txt").read())
    except:
        last_time = 0

    print "\n" + "-" * 75
    print "Starting update at", time.ctime(started)

    updated = updateFromFiles(session, options.master, options.name, builders,
                              last_time, options.times)

    print "Updated", updated, "builds in:"
Ejemplo n.º 2
0
    def updateStatusDB(self, build, request_ids):
        log.info("Updating statusdb")
        session = model.connect(self.config['statusdb.url'])()
        master = model.Master.get(session, self.config['statusdb.master_url'])
        master.name = unicode(self.config['statusdb.master_name'])

        if not master.id:
            log.debug("added master")
            session.add(master)
            session.commit()

        builder_name = build.builder.name
        db_builder = model.Builder.get(session, builder_name, master.id)
        db_builder.category = unicode(build.getProperty('branch'))

        starttime = None
        if build.started:
            starttime = datetime.utcfromtimestamp(build.started)

        log.debug("searching for build")
        q = session.query(model.Build).filter_by(
            master_id=master.id,
            builder=db_builder,
            buildnumber=build.number,
            starttime=starttime,
        )
        db_build = q.first()
        if not db_build:
            log.debug("creating new build")
            db_build = model.Build.fromBBBuild(
                session, build, builder_name, master.id)
        else:
            log.debug("updating old build")
            db_build.updateFromBBBuild(session, build)
        session.commit()
        log.debug("committed")

        log.debug("updating schedulerdb_requests table")

        schedulerdb = sa.create_engine(self.config['schedulerdb.url'])

        for i in request_ids:
            # See if we already have this row
            q = model.schedulerdb_requests.select()
            q = q.where(
                model.schedulerdb_requests.c.status_build_id == db_build.id)
            q = q.where(model.schedulerdb_requests.c.scheduler_request_id == i)
            q = q.limit(1).execute()
            if not q.fetchone():
                # Find the schedulerdb build id for this
                bid = schedulerdb.execute(
                    sa.text('select id from builds where brid=:brid and number=:number'),
                    brid=i, number=build.number
                ).fetchone()
                if bid is not None:
                    bid = bid[0]
                    log.debug("bid for %s is %s", i, bid)
                    model.schedulerdb_requests.insert().execute(
                        status_build_id=db_build.id,
                        scheduler_request_id=i,
                        scheduler_build_id=bid,
                    )
        log.debug("build id is %s", db_build.id)
        return db_build.id
Ejemplo n.º 3
0
        monkeypatch(BuilderStatus, builder_setstate_events)
    else:
        monkeypatch(BuilderStatus, builder_setstate_noevents)
    monkeypatch(BuildStepStatus, buildstep_setstate)

    builders = []
    for a in args:
        if os.path.exists(os.path.join(a, "builder")):
            builders.append(a)
        else:
            for d in os.listdir(a):
                p = os.path.join(a, d)
                if os.path.exists(os.path.join(a, d, "builder")):
                    builders.append(p)

    session = model.connect(options.database)()

    started = time.time()
    try:
        last_time = float(open("last_time.txt").read())
    except:
        last_time = 0

    print "\n" + "-"*75
    print "Starting update at", time.ctime(started)

    updated = updateFromFiles(session, options.master, options.name, builders, last_time, options.times)

    print "Updated", updated, "builds in:"

    open("last_time.txt", "w").write(str(started))
#!/usr/bin/env python
"""
Drops all the tables, and re-creates them
"""
from buildbotcustom.status.db.model import connect
import sys
connect(sys.argv[1], drop_all=True)
    def updateStatusDB(self, build, request_ids):
        log.info("Updating statusdb")
        session = model.connect(self.config['statusdb.url'])()
        master = model.Master.get(session, self.config['statusdb.master_url'])
        master.name = unicode(self.config['statusdb.master_name'])

        if not master.id:
            log.debug("added master")
            session.add(master)
            session.commit()

        builder_name = build.builder.name
        db_builder = model.Builder.get(session, builder_name, master.id)
        db_builder.category = unicode(build.getProperty('branch'))

        starttime = None
        if build.started:
            starttime = datetime.utcfromtimestamp(build.started)

        log.debug("searching for build")
        q = session.query(model.Build).filter_by(
            master_id=master.id,
            builder=db_builder,
            buildnumber=build.number,
            starttime=starttime,
        )
        db_build = q.first()
        # Force start/endtime to None initially so that we get all the
        # properties, steps, etc. populated
        old_times = build.started, build.finished
        build.started, build.finished = None, None
        if not db_build:
            log.debug("creating new build")
            db_build = model.Build.fromBBBuild(session, build, builder_name,
                                               master.id)
        else:
            log.debug("updating old build")
            db_build.updateFromBBBuild(session, build)
        session.commit()
        log.debug("committed")

        # Now we can record the actual build times
        log.debug("updating times")
        old_times = [ts2dt(t) for t in old_times]
        db_build.starttime, db_build.endtime = old_times
        session.commit()

        log.debug("updating schedulerdb_requests table")

        schedulerdb = sa.create_engine(self.config['schedulerdb.url'])

        for i in request_ids:
            # See if we already have this row
            q = model.schedulerdb_requests.select()
            q = q.where(
                model.schedulerdb_requests.c.status_build_id == db_build.id)
            q = q.where(model.schedulerdb_requests.c.scheduler_request_id == i)
            q = q.limit(1).execute()
            if not q.fetchone():
                # Find the schedulerdb build id for this
                bid = schedulerdb.execute(sa.text(
                    'select id from builds where brid=:brid and number=:number'
                ),
                                          brid=i,
                                          number=build.number).fetchone()
                if bid is not None:
                    bid = bid[0]
                    log.debug("bid for %s is %s", i, bid)
                    model.schedulerdb_requests.insert().execute(
                        status_build_id=db_build.id,
                        scheduler_request_id=i,
                        scheduler_build_id=bid,
                    )
        log.debug("build id is %s", db_build.id)
        return db_build.id