Parcourir la source

server picker

raylu il y a 11 ans
Parent
commit
e0dadb2514
6 fichiers modifiés avec 41 ajouts et 13 suppressions
  1. 15 3
      web/db.py
  2. 2 2
      web/schema.sql
  3. 10 6
      web/server.py
  4. 3 1
      web/static/js/stats.js
  5. 7 1
      web/templates/home.html
  6. 4 0
      web/templates/stats.html

+ 15 - 3
web/db.py

@@ -1,3 +1,4 @@
+from collections import defaultdict
 import hashlib
 import hmac
 import binascii
@@ -54,9 +55,20 @@ class MomokoDB:
 	@tornado.gen.coroutine
 	def get_groups(self, user_id):
 		cursor = yield self.execute('''
-			SELECT groups.id, groups.name FROM users
-			JOIN user_groups ON users.id = user_groups.user_id
+			SELECT groups.id, groups.name FROM user_groups
 			JOIN groups ON user_groups.group_id = groups.id
-			WHERE users.id = %s;
+			WHERE user_id = %s;
 		''', user_id)
 		return cursor.fetchall()
+
+	@tornado.gen.coroutine
+	def get_servers(self, user_id):
+		cursor = yield self.execute('''
+			SELECT servers.id, servers.group_id, servers.hostname FROM user_groups
+			JOIN servers ON user_groups.group_id = servers.group_id
+			WHERE user_id = %s;
+		''', user_id)
+		servers = defaultdict(list)
+		for row in cursor.fetchall():
+			servers[row['group_id']].append(row)
+		return servers

+ 2 - 2
web/schema.sql

@@ -23,7 +23,7 @@ CREATE TABLE user_groups (
 );
 
 CREATE TABLE servers (
-	id serial PRIMARY KEY references groups(id),
-	group_id integer,
+	id serial PRIMARY KEY,
+	group_id integer references groups(id),
 	hostname varchar(256) NOT NULL
 );

+ 10 - 6
web/server.py

@@ -41,10 +41,12 @@ class BaseHandler(tornado.web.RequestHandler):
 class MainHandler(BaseHandler):
 	@tornado.gen.coroutine
 	def get(self):
-		groups = None
+		groups = servers = None
 		if self.current_user:
-			groups = yield self.db.get_groups(self.current_user['id'])
-		self.render('home.html', groups=groups)
+			user_id = self.current_user['id']
+			groups = yield self.db.get_groups(user_id)
+			servers = yield self.db.get_servers(user_id)
+		self.render('home.html', groups=groups, servers=servers)
 
 class RegisterHandler(BaseHandler):
 	@tornado.gen.coroutine
@@ -82,8 +84,10 @@ class LogoutHandler(BaseHandler):
 
 class StatsHandler(BaseHandler):
 	@tornado.gen.coroutine
-	def get(self):
-		self.render('stats.html')
+	def get(self, group_id, server_id):
+		group_id = int(group_id)
+		servers = yield self.db.get_servers(self.current_user['id'])
+		self.render('stats.html', group_id=group_id, servers=servers[group_id])
 
 class GroupCreateHandler(BaseHandler):
 	@tornado.gen.coroutine
@@ -105,7 +109,7 @@ if __name__ == '__main__':
 			(r'/register', RegisterHandler),
 			(r'/login', LoginHandler),
 			(r'/logout', LogoutHandler),
-			(r'/stats', StatsHandler),
+			(r'/stats/(\d+)/(\d+)', StatsHandler),
 			(r'/groups/create', GroupCreateHandler),
 			(r'/(css/.+)\.css', CSSHandler),
 		],

+ 3 - 1
web/static/js/stats.js

@@ -38,8 +38,10 @@ window.addEvent('domready', function() {
 		},
 	});
 
+	var split = document.location.pathname.split('/');
+	var url = 'http://localhost:8892/v1/' + split[2] + '/stats/' + split[3];
 	new Request.JSON({
-		'url': 'http://localhost:8892/v1/1/stats/1?start=2014-04-19&end=2014-04-19',
+		'url': url + '?start=2014-04-19&end=2014-04-19',
 		'onSuccess': graph_stats,
 	}).get();
 

+ 7 - 1
web/templates/home.html

@@ -3,7 +3,13 @@
 {% block main %}
 	{% if current_user %}
 		{% for group in groups %}
-			{{ group['id'] }}: {{ group['name'] }}
+			<p>
+				{{ group['id'] }}: {{ group['name'] }}
+				{% for server in servers[group['id']] %}
+					<br>
+					<a href="/stats/{{ group['id'] }}/{{ server['id'] }}">{{ server['hostname'] }}</a>
+				{% end %}
+			</p>
 		{% end %}
 		<form method="post" action="/groups/create">
 			<input type="text" name="name">

+ 4 - 0
web/templates/stats.html

@@ -11,5 +11,9 @@
 {% end %}
 
 {% block main %}
+	{% for server in servers %}
+		<br>
+		<a href="/stats/{{ group_id }}/{{ server['id'] }}">{{ server['hostname'] }}</a>
+	{% end %}
 	<div id="graphs"></div>
 {% end %}