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:"
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
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