def setDb(self, dburi, releases_history_buckets=None, releases_history_class=None): from auslib.db import AUSDatabase, GCSHistory if not releases_history_class and releases_history_buckets is not None: releases_history_class = GCSHistory self.db = AUSDatabase( dburi, releases_history_buckets=releases_history_buckets, releases_history_class=releases_history_class)
usage += " cleanup: Cleanup old data from a database. Requires an extra arg of maximum age (in days) of nightly releases. " \ "Anything older than this will be deleted.\n" usage += " cleanup-dryrun: Show what would be removed if 'cleanup' is run." parser = OptionParser(usage=usage) parser.add_option("-d", "--db", dest="db", default=None, help="database to manage, in URI format") parser.add_option("--version", dest="version", default=None, type="int", help="Create/upgrade to this specific schema version rather than the latest.") options, args = parser.parse_args() if not options.db: parser.error("db is required") if len(args) < 1: parser.error("need an action to perform") action = args[0] db = AUSDatabase(options.db, mysql_traditional_mode=True) if action == 'create': db.create(options.version) elif action == 'upgrade': db.upgrade(options.version) elif action == 'downgrade': db.downgrade(options.version) elif action.startswith("cleanup"): if len(args) < 2: parser.error("need to pass maximum nightly release age") nightly_age = int(args[1]) with db.begin() as trans: if action == "cleanup": cleanup_releases(trans, nightly_age, dryrun=False) cleanup_releases_history(trans, dryrun=False) else:
sys.path.append(path.join(path.dirname(__file__), "..")) from auslib.blobs.apprelease import ReleaseBlobV1 from auslib.db import AUSDatabase if __name__ == "__main__": from optparse import OptionParser doc = "%s --db dburi -r release-name -v version -p product foo.json" % sys.argv[0] parser = OptionParser(doc) parser.add_option("-d", "--db", dest="db", default=None, help="database to manage, in URI format") parser.add_option("-r", "--release", dest="release", default=None, help="Release to put blob into") parser.add_option("-v", "--version", dest="version", default=None, help="Version of the release") parser.add_option("-p", "--product", dest="product", default=None, help="Product of the release") options, args = parser.parse_args() logging.basicConfig(level=logging.DEBUG, format="%(asctime)s: %(message)s") if not options.db or not options.release or not options.version or not options.product or len(args) != 1: print doc sys.exit(1) db = AUSDatabase(options.db) blob = ReleaseBlobV1() blob.loadJSON(open(args[0]).read()) try: old = db.releases.getReleases(name=options.release)[0] db.releases.updateRelease(name=options.release, product=options.product, version=options.version, changed_by='import-json', old_data_version=old['data_version'], blob=blob) except IndexError: db.releases.addRelease(name=options.release, product=options.product, version=options.version, blob=blob, changed_by='import-json')
def setDb(self, dburi): from auslib.db import AUSDatabase self.db = AUSDatabase(dburi)
dest="name", required=True, help="The name of the person/script doing the migrations.") parser.add_argument("releases", metavar="release", nargs="+", help="The releases (aka blob names) to migrate.") args = parser.parse_args() if args.db and args.ini: parser.error("Cannot specify --db and --ini!") if args.ini: cfg = AdminConfig(args.ini) db = AUSDatabase(cfg.getDburi()) db.setDomainWhitelist(cfg.getDomainWhitelist()) else: db = AUSDatabase(args.db) for release in args.releases: try: rel = db.releases.getReleases(name=release)[0] blob = rel["data"] except: log.debug("No such release '%s', skipping", release) if blob["schema_version"] == 4: log.debug("%s is already schema 4, skipping", release) continue elif blob["schema_version"] != 3: