1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-24 21:07:17 +00:00

Add peers page

This commit is contained in:
plt
2011-03-19 22:06:58 +08:00
parent b3913eb0f5
commit 8efb42e166
6 changed files with 141 additions and 10 deletions

View File

@@ -21,29 +21,22 @@
<li>
<a href="/home/">Home</a>
</li>
<li>
<a href="/msgs/">Messages</a>
</li>
<li>
<a href="/files/">Files</a>
</li>
<li>
<a href="/peers/">Peers</a>
</li>
<li>
<a href="/groups/">Groups</a>
</li>
<li>
<a href="/settings/">Settings</a>
</li>
</ul>
</div>
<div class="nav-separator"></div>
</div>
<div id="main">
<div id="left-panel">
{% block left_panel %}{% endblock %}
</div>
<div id="right-panel">
{% block right_panel %}{% endblock %}
</div>
<div id="main-panel">
</div>

31
templates/peers.html Normal file
View File

@@ -0,0 +1,31 @@
{% extends "base.html" %}
{% block title %}Peers{% endblock %}
{% block left_panel %}
<ul>
<li><a href="?type=mypeer">My Peers</a></li>
<li><a href="?type=all">All Peers</a></li>
</ul>
{% endblock %}
{% block right_panel %}
<table class="peer-list default">
<tr>
<th>Name</th>
<th>ID</th>
<th>Roles</th>
<th>My Roles On Peer</th>
<th>Action</th>
</tr>
{% for peer in peers %}
<tr>
<td>{{ peer.props.name }}</td>
<td>{{ peer.props.id }}</td>
<td>{{ peer.props.role_list }}</td>
<td>{{ peer.props.my_role_list }}</td>
<td></td>
</tr>
{% endfor %}
</table>
{% endblock %}

View File

@@ -0,0 +1,7 @@
import service
from service import cclient, ccnet_rpc, seamsg_rpc
from service import translate_peerid, translate_msgtime
from service import get_peers_by_role
from service import get_groups, get_group

View File

@@ -0,0 +1,78 @@
from datetime import datetime
import os
import sys
from pysearpc import SearpcError
import ccnet
import seamsg
DEFAULT_CCNET_CONF_PATH = "~/.ccnet"
if 'CCNET_CONF_DIR' in os.environ:
CCNET_CONF_PATH = os.environ['CCNET_CONF_DIR']
else:
CCNET_CONF_PATH = DEFAULT_CCNET_CONF_PATH
# this is not connect daemon, used for the web to display
# (name, id) info
cclient = ccnet.Client()
cclient.load_confdir(CCNET_CONF_PATH)
pool = ccnet.ClientPool(CCNET_CONF_PATH)
ccnet_rpc = ccnet.CcnetRpcClient(pool)
seamsg_rpc = seamsg.RpcClient(pool)
peer_db = {}
def translate_peerid(peer_id):
try:
peer = peer_db[peer_id]
except:
peer = ccnet_rpc.get_peer(peer_id)
if peer:
peer_db['peer_id'] = peer
else:
return peer_id
return peer.props.name + "(" + peer_id[:4] + ")"
def translate_msgtime(msgtime):
return datetime.fromtimestamp(
(float(msgtime))/1000000).strftime("%Y-%m-%d %H:%M:%S")
def get_peers_by_role(role):
try:
peer_ids = ccnet_rpc.get_peers_by_role(role)
except SearpcError:
return []
peers = []
for peer_id in peer_ids.split("\n"):
# too handle the ending '\n'
if peer_id == '':
continue
peer = ccnet_rpc.get_peer(peer_id)
peers.append(peer)
return peers
def get_groups():
group_ids = ccnet_rpc.list_groups()
if not group_ids:
return []
groups = []
for group_id in group_ids.split("\n"):
# too handle the ending '\n'
if group_id == '':
continue
group = ccnet_rpc.get_group(group_id)
groups.append(group)
return groups
def get_group(group_id):
group = ccnet_rpc.get_group(group_id)
group.members = group.props.members.split(" ")
group.followers = group.props.followers.split(" ")
return group

View File

@@ -1,6 +1,6 @@
from django.conf.urls.defaults import *
from django.conf import settings
from seahub.views import root, home
from seahub.views import root, home, peers
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
@@ -19,6 +19,7 @@ urlpatterns = patterns('',
(r'^$', root),
(r'^home/$', home),
(r'^peers/$', peers),
)
if settings.DEBUG:

View File

@@ -3,9 +3,30 @@ from django.shortcuts import render_to_response
from django.core.urlresolvers import reverse
from django.template import RequestContext
from seaserv import cclient, ccnet_rpc
def root(request):
return HttpResponseRedirect(reverse(home))
def home(request):
return render_to_response('home.html', {
}, context_instance=RequestContext(request))
def peers(request):
peer_type = request.REQUEST.get('type', 'all')
peer_ids = ccnet_rpc.list_peers()
peers = []
for peer_id in peer_ids.split("\n"):
# too handle the ending '\n'
if peer_id == '':
continue
peer = ccnet_rpc.get_peer(peer_id)
if peer_type == 'all':
peers.append(peer)
if peer_type == 'mypeer':
if peer.props.role_list.find('MyPeer') != -1:
peers.append(peer)
return render_to_response('peers.html', {
'peers': peers,
}, context_instance=RequestContext(request))