浏览代码

group management page (create, invite)

raylu 11 年之前
父节点
当前提交
1e21e32977
共有 5 个文件被更改,包括 53 次插入6 次删除
  1. 6 0
      web/db.py
  2. 20 0
      web/sysvitals_web.py
  3. 1 0
      web/templates/base.html
  4. 25 0
      web/templates/groups.html
  5. 1 6
      web/templates/home.html

+ 6 - 0
web/db.py

@@ -56,6 +56,12 @@ class MomokoDB:
 		yield self.execute('INSERT INTO user_groups (user_id, group_id) VALUES(%s, %s);', user_id, group_id)
 		return group_id
 
+	@tornado.gen.coroutine
+	def invite_user_group(self, username, group_id):
+		cursor = yield self.execute('SELECT id FROM users WHERE username = %s;', username)
+		user_id = cursor.fetchone()['id']
+		yield self.execute('INSERT INTO user_groups (user_id, group_id) VALUES(%s, %s);', user_id, group_id)
+
 	@tornado.gen.coroutine
 	def get_groups(self, user_id):
 		cursor = yield self.execute('''

+ 20 - 0
web/sysvitals_web.py

@@ -84,6 +84,7 @@ class LogoutHandler(BaseHandler):
 		self.redirect('/')
 
 class StatsHandler(BaseHandler):
+	@tornado.web.authenticated
 	@tornado.gen.coroutine
 	def get(self, group_id, server_id):
 		group_id = int(group_id)
@@ -91,12 +92,29 @@ class StatsHandler(BaseHandler):
 		servers = yield self.db.get_servers(self.current_user['id'])
 		self.render('stats.html', group_id=group_id, api_key=api_key, servers=servers[group_id])
 
+class GroupsHandler(BaseHandler):
+	@tornado.web.authenticated
+	@tornado.gen.coroutine
+	def get(self):
+		user_id = self.current_user['id']
+		groups = yield self.db.get_groups(user_id)
+		self.render('groups.html', groups=groups)
+
 class GroupCreateHandler(BaseHandler):
+	@tornado.web.authenticated
 	@tornado.gen.coroutine
 	def post(self):
 		yield self.db.create_group(self.current_user['id'], self.get_body_argument('name'))
 		self.redirect('/')
 
+class GroupInviteHandler(BaseHandler):
+	@tornado.web.authenticated
+	@tornado.gen.coroutine
+	def post(self):
+		group_id = int(self.get_body_argument('group'))
+		yield self.db.invite_user_group(self.get_body_argument('username'), group_id)
+		self.redirect('/')
+
 class CSSHandler(tornado.web.RequestHandler):
 	def get(self, css_path):
 		css_path = os.path.join(os.path.dirname(__file__), 'static', css_path) + '.ccss'
@@ -112,7 +130,9 @@ if __name__ == '__main__':
 			(r'/login', LoginHandler),
 			(r'/logout', LogoutHandler),
 			(r'/stats/(\d+)/(\d+)', StatsHandler),
+			(r'/groups', GroupsHandler),
 			(r'/groups/create', GroupCreateHandler),
+			(r'/groups/invite', GroupInviteHandler),
 			(r'/(css/.+)\.css', CSSHandler),
 		],
 		template_path=os.path.join(os.path.dirname(__file__), 'templates'),

+ 1 - 0
web/templates/base.html

@@ -19,6 +19,7 @@
 			<div class="title"><a href="/">sysvitals.com</a></div>
 			<div class="nav">
 				{% if current_user %}
+					<a href="/groups">groups</a>
 					<a href="/logout">logout</a>
 				{% else %}
 					<a href="/login">login</a>

+ 25 - 0
web/templates/groups.html

@@ -0,0 +1,25 @@
+{% extends "base.html" %}
+
+{% block main %}
+	{% for group in groups %}
+		{{ group['id'] }}: {{ group['name'] }} ({{ group['api_key'] }})
+		<br>
+	{% end %}
+	<br>
+	<form method="post" action="/groups/create">
+		create a group:
+		<input type="text" name="name" placeholder="name">
+		<input type="submit">
+	</form>
+	<br>
+	<form method="post" action="/groups/invite">
+		invite a user:
+		<input type="text" name="username" placeholder="username">
+		<select name="group">
+			{% for group in groups %}
+				<option value="{{ group['id'] }}">{{ group['name'] }}</option>
+			{% end %}
+		</select>
+		<input type="submit">
+	</form>
+{% end %}

+ 1 - 6
web/templates/home.html

@@ -4,17 +4,12 @@
 	{% if current_user %}
 		{% for group in groups %}
 			<p>
-				{{ group['id'] }}: {{ group['name'] }} ({{ group['api_key'] }})
+				{{ 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">
-			create a group:
-			<input type="text" name="name">
-			<input type="submit">
-		</form>
 	{% end %}
 {% end %}