Create db task instead of SQL tables.

This commit is contained in:
Arik Fraimovich
2014-02-01 17:44:03 +02:00
parent f890e590e1
commit 41d00543d0
3 changed files with 31 additions and 57 deletions

View File

@@ -39,6 +39,12 @@ def start_server(port, debug):
app.run(debug=debug, port=port) app.run(debug=debug, port=port)
def create_db(create_tables, drop_tables):
from redash.models import create_db
create_db(create_tables, drop_tables)
if __name__ == '__main__': if __name__ == '__main__':
channel = logging.StreamHandler() channel = logging.StreamHandler()
logging.getLogger().addHandler(channel) logging.getLogger().addHandler(channel)
@@ -55,10 +61,19 @@ if __name__ == '__main__':
server_parser.add_argument('--port', server_parser.add_argument('--port',
default=8888, default=8888,
help='port to bind to') help='port to bind to')
db_parser = subparsers.add_parser('db', help='database operations')
db_parser.add_argument('--create-tables',
action='store_true',
help='Create all tables')
db_parser.add_argument('--drop-tables',
action='store_true',
help='Drop all tables')
args = parser.parse_args() args = parser.parse_args()
if args.command == "worker": if args.command == "worker":
start_workers() start_workers()
elif args.command == 'db':
create_db(args.create_tables, args.drop_tables)
elif args.command == 'server': elif args.command == 'server':
start_server(args.port, args.debug) start_server(args.port, args.debug)

View File

@@ -1,56 +0,0 @@
BEGIN;
CREATE TABLE "query_results" (
"id" serial NOT NULL PRIMARY KEY,
"query_hash" varchar(32) NOT NULL,
"query" text NOT NULL,
"data" text NOT NULL,
"runtime" double precision NOT NULL,
"retrieved_at" timestamp with time zone NOT NULL
)
;
CREATE TABLE "queries" (
"id" serial NOT NULL PRIMARY KEY,
"latest_query_data_id" integer REFERENCES "query_results" ("id") DEFERRABLE INITIALLY DEFERRED,
"name" varchar(255) NOT NULL,
"description" varchar(4096),
"query" text NOT NULL,
"query_hash" varchar(32) NOT NULL,
"api_key" varchar(40),
"ttl" integer NOT NULL,
"user" varchar(360) NOT NULL,
"created_at" timestamp with time zone NOT NULL
)
;
CREATE TABLE "dashboards" (
"id" serial NOT NULL PRIMARY KEY,
"slug" varchar(140) NOT NULL,
"name" varchar(100) NOT NULL,
"user" varchar(360) NOT NULL,
"layout" text NOT NULL,
"is_archived" boolean NOT NULL
)
;
CREATE TABLE "visualizations" (
"id" serial NOT NULL PRIMARY KEY,
"type" varchar(100) NOT NULL,
"query_id" integer NOT NULL REFERENCES "queries" ("id") DEFERRABLE INITIALLY DEFERRED,
"name" varchar(255) NOT NULL,
"description" varchar(4096),
"options" text NOT NULL
)
;
CREATE TABLE "widgets" (
"id" serial NOT NULL PRIMARY KEY,
"type" varchar(100) NOT NULL,
"width" integer NOT NULL,
"options" text NOT NULL,
"query_id" integer,
"visualization_id" integer NOT NULL REFERENCES "visualizations" ("id") DEFERRABLE INITIALLY DEFERRED,
"dashboard_id" integer NOT NULL REFERENCES "dashboards" ("id") DEFERRABLE INITIALLY DEFERRED
)
;
CREATE INDEX "queries_latest_query_data_id" ON "queries" ("latest_query_data_id");
CREATE INDEX "widgets_query_id" ON "widgets" ("query_id");
CREATE INDEX "widgets_dashboard_id" ON "widgets" ("dashboard_id");
COMMIT;

View File

@@ -180,4 +180,19 @@ class Widget(db.Model):
} }
def __unicode__(self): def __unicode__(self):
return u"%s=>%s" % (self.id, self.dashboard_id) return u"%s=>%s" % (self.id, self.dashboard_id)
def create_db(create_tables, drop_tables):
all_models = (QueryResult, Query, Dashboard, Widget)
db.connect_db()
for model in all_models:
if drop_tables and model.table_exists():
model.drop_table()
if create_tables:
model.create_table()
db.close_db(None)