Revision c7d0fe09
b/muparse/management/commands/parse_munin.py | ||
---|---|---|
19 | 19 |
from mupy.muparse.models import * |
20 | 20 |
from django.conf import settings |
21 | 21 |
|
22 |
mnodes = settings.MUNIN_NODES |
|
22 | 23 |
|
23 |
baseUrl = settings.MUNIN_URL |
|
24 |
cgiPath = settings.MUNIN_CGI_PATH |
|
25 | 24 |
|
26 | 25 |
class Command(NoArgsCommand): |
27 | 26 |
|
28 |
def parseUrlSoup(self, url):
|
|
29 |
serverListPage = urllib.urlopen("%s/%s" %(baseUrl, url)) |
|
27 |
def parseUrlSoup(self, baseUrl, urlPage):
|
|
28 |
serverListPage = urllib.urlopen("%s/%s" %(baseUrl, urlPage))
|
|
30 | 29 |
htmlText = serverListPage.read() |
31 | 30 |
serverListPage.close() |
32 | 31 |
return BeautifulSoup(htmlText) |
33 | 32 |
|
34 | 33 |
|
35 | 34 |
def handle_noargs(self, **options): |
36 |
soup = self.parseUrlSoup("index.html") |
|
37 |
homePage = soup.find_all('span', attrs={'class':'domain'}) |
|
38 |
for nodeGroup in homePage: |
|
39 |
ng_url = "%s/%s" %(baseUrl, nodeGroup.a.get('href')) |
|
40 |
ng,created = NodeGroup.objects.get_or_create(name=nodeGroup.a.text, url=ng_url) |
|
41 |
self.stdout.write('Added nodeGroup: %s\n' % ng.name.encode('utf8')) |
|
42 |
# print i.a.text, i.a.get('href') |
|
43 |
for node in nodeGroup.findParent('li').findChildren('span', attrs={'class':'host'}): |
|
44 |
#print node.a.text, node.a.get('href') |
|
45 |
n_url = "%s/%s" %(baseUrl, node.a.get('href')) |
|
46 |
n,created = Node.objects.get_or_create(name=node.a.text, url=n_url, group=ng) |
|
47 |
self.stdout.write('-Added node: %s\n' % n.name.encode('utf8')) |
|
48 |
nodeSoup = self.parseUrlSoup(node.a.get('href')) |
|
49 |
metricsTable = nodeSoup.find_all('td',{'class':'graphbox'}) |
|
50 |
for metricGroup in metricsTable: |
|
51 |
metricCategory = metricGroup.get('id') |
|
52 |
graphCategories = metricGroup.find_all('div', {'class':'lighttext'}) |
|
53 |
gc,created = GraphCategory.objects.get_or_create(name=metricCategory) |
|
54 |
self.stdout.write('-Added Category: %s\n' % gc.name.encode('utf8')) |
|
55 |
for graphCategory in graphCategories: |
|
56 |
pageUrl = "%s/%s/%s/%s" %(baseUrl, nodeGroup.a.text, n.name, graphCategory.a.get('href')) |
|
57 |
self.stdout.write('-Page URL: %s\n' % pageUrl.encode('utf8')) |
|
58 |
t = graphCategory.findParent('tr').find_next_sibling('tr') |
|
59 |
g,created = Graph.objects.get_or_create(name=graphCategory.a.text, slug=t.img.get('src').split('/')[-1:][0].split('-')[0], category=gc) |
|
60 |
self.stdout.write('--Added Graph: %s\n' % g.name.encode('utf8')) |
|
61 |
imageUrl = "%s/%s%s/%s/%s" %(baseUrl, cgiPath, nodeGroup.a.text, n.name, g.slug) |
|
62 |
nodegraph, created = NodeGraphs.objects.get_or_create(node=n, graph=g, baseurl=imageUrl, pageurl=pageUrl) |
|
63 |
self.stdout.write('--Added NodeGraph: %s\n' % nodegraph) |
|
35 |
for mnode in mnodes: |
|
36 |
mnode_dict = mnode[1] |
|
37 |
mnode_id = mnode[0] |
|
38 |
baseUrl = mnode_dict['url'] |
|
39 |
cgiPath = mnode_dict['cgi_path'] |
|
40 |
soup = self.parseUrlSoup(baseUrl, "index.html") |
|
41 |
homePage = soup.find_all('span', attrs={'class':'domain'}) |
|
42 |
for nodeGroup in homePage: |
|
43 |
ng_url = "%s/%s" %(baseUrl, nodeGroup.a.get('href')) |
|
44 |
ng,created = NodeGroup.objects.get_or_create(name="%s@%s"%(nodeGroup.a.text, mnode_dict['name']), url=ng_url) |
|
45 |
self.stdout.write('Added nodeGroup: %s\n' % ng.name.encode('utf8')) |
|
46 |
# print i.a.text, i.a.get('href') |
|
47 |
for node in nodeGroup.findParent('li').findChildren('span', attrs={'class':'host'}): |
|
48 |
#print node.a.text, node.a.get('href') |
|
49 |
n_url = "%s/%s" %(baseUrl, node.a.get('href')) |
|
50 |
n,created = Node.objects.get_or_create(name=node.a.text, url=n_url, group=ng) |
|
51 |
self.stdout.write('-Added node: %s\n' % n.name.encode('utf8')) |
|
52 |
nodeSoup = self.parseUrlSoup(baseUrl, node.a.get('href')) |
|
53 |
metricsTable = nodeSoup.find_all('td',{'class':'graphbox'}) |
|
54 |
for metricGroup in metricsTable: |
|
55 |
metricCategory = metricGroup.get('id') |
|
56 |
graphCategories = metricGroup.find_all('div', {'class':'lighttext'}) |
|
57 |
gc,created = GraphCategory.objects.get_or_create(name=metricCategory) |
|
58 |
self.stdout.write('-Added Category: %s\n' % gc.name.encode('utf8')) |
|
59 |
for graphCategory in graphCategories: |
|
60 |
pageUrl = "%s/%s/%s/%s" %(baseUrl, nodeGroup.a.text, n.name, graphCategory.a.get('href')) |
|
61 |
self.stdout.write('-Page URL: %s\n' % pageUrl.encode('utf8')) |
|
62 |
t = graphCategory.findParent('tr').find_next_sibling('tr') |
|
63 |
g,created = Graph.objects.get_or_create(name=graphCategory.a.text, slug=t.img.get('src').split('/')[-1:][0].split('-')[0], category=gc) |
|
64 |
self.stdout.write('--Added Graph: %s\n' % g.name.encode('utf8')) |
|
65 |
imageUrl = "%s/%s%s/%s/%s" %(baseUrl, cgiPath, nodeGroup.a.text, n.name, g.slug) |
|
66 |
nodegraph, created = NodeGraphs.objects.get_or_create(node=n, graph=g, baseurl=imageUrl, pageurl=pageUrl) |
|
67 |
self.stdout.write('--Added NodeGraph: %s\n' % nodegraph) |
|
64 | 68 |
|
b/muparse/migrations/0001_initial.py | ||
---|---|---|
1 |
# encoding: utf-8 |
|
2 |
import datetime |
|
3 |
from south.db import db |
|
4 |
from south.v2 import SchemaMigration |
|
5 |
from django.db import models |
|
6 |
|
|
7 |
class Migration(SchemaMigration): |
|
8 |
|
|
9 |
def forwards(self, orm): |
|
10 |
|
|
11 |
# Adding model 'NodeGroup' |
|
12 |
db.create_table('muparse_nodegroup', ( |
|
13 |
('url', self.gf('django.db.models.fields.CharField')(max_length=512)), |
|
14 |
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
|
15 |
('name', self.gf('django.db.models.fields.CharField')(max_length=255)), |
|
16 |
)) |
|
17 |
db.send_create_signal('muparse', ['NodeGroup']) |
|
18 |
|
|
19 |
# Adding model 'GraphCategory' |
|
20 |
db.create_table('muparse_graphcategory', ( |
|
21 |
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
|
22 |
('name', self.gf('django.db.models.fields.SlugField')(max_length=255, db_index=True)), |
|
23 |
)) |
|
24 |
db.send_create_signal('muparse', ['GraphCategory']) |
|
25 |
|
|
26 |
# Adding model 'Graph' |
|
27 |
db.create_table('muparse_graph', ( |
|
28 |
('category', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['muparse.GraphCategory'])), |
|
29 |
('slug', self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True)), |
|
30 |
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
|
31 |
('name', self.gf('django.db.models.fields.SlugField')(max_length=255, db_index=True)), |
|
32 |
)) |
|
33 |
db.send_create_signal('muparse', ['Graph']) |
|
34 |
|
|
35 |
# Adding model 'Node' |
|
36 |
db.create_table('muparse_node', ( |
|
37 |
('url', self.gf('django.db.models.fields.CharField')(max_length=512)), |
|
38 |
('group', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['muparse.NodeGroup'])), |
|
39 |
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
|
40 |
('name', self.gf('django.db.models.fields.SlugField')(max_length=255, db_index=True)), |
|
41 |
)) |
|
42 |
db.send_create_signal('muparse', ['Node']) |
|
43 |
|
|
44 |
# Adding model 'NodeGraphs' |
|
45 |
db.create_table('muparse_nodegraphs', ( |
|
46 |
('node', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['muparse.Node'])), |
|
47 |
('graph', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['muparse.Graph'])), |
|
48 |
('pageurl', self.gf('django.db.models.fields.CharField')(max_length=512)), |
|
49 |
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
|
50 |
('baseurl', self.gf('django.db.models.fields.CharField')(max_length=512)), |
|
51 |
)) |
|
52 |
db.send_create_signal('muparse', ['NodeGraphs']) |
|
53 |
|
|
54 |
# Adding model 'SavedSearch' |
|
55 |
db.create_table('muparse_savedsearch', ( |
|
56 |
('display_type', self.gf('django.db.models.fields.CharField')(max_length=64)), |
|
57 |
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
|
58 |
('description', self.gf('django.db.models.fields.CharField')(max_length=255)), |
|
59 |
)) |
|
60 |
db.send_create_signal('muparse', ['SavedSearch']) |
|
61 |
|
|
62 |
# Adding M2M table for field graphs on 'SavedSearch' |
|
63 |
db.create_table('muparse_savedsearch_graphs', ( |
|
64 |
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), |
|
65 |
('savedsearch', models.ForeignKey(orm['muparse.savedsearch'], null=False)), |
|
66 |
('nodegraphs', models.ForeignKey(orm['muparse.nodegraphs'], null=False)) |
|
67 |
)) |
|
68 |
db.create_unique('muparse_savedsearch_graphs', ['savedsearch_id', 'nodegraphs_id']) |
|
69 |
|
|
70 |
|
|
71 |
def backwards(self, orm): |
|
72 |
|
|
73 |
# Deleting model 'NodeGroup' |
|
74 |
db.delete_table('muparse_nodegroup') |
|
75 |
|
|
76 |
# Deleting model 'GraphCategory' |
|
77 |
db.delete_table('muparse_graphcategory') |
|
78 |
|
|
79 |
# Deleting model 'Graph' |
|
80 |
db.delete_table('muparse_graph') |
|
81 |
|
|
82 |
# Deleting model 'Node' |
|
83 |
db.delete_table('muparse_node') |
|
84 |
|
|
85 |
# Deleting model 'NodeGraphs' |
|
86 |
db.delete_table('muparse_nodegraphs') |
|
87 |
|
|
88 |
# Deleting model 'SavedSearch' |
|
89 |
db.delete_table('muparse_savedsearch') |
|
90 |
|
|
91 |
# Removing M2M table for field graphs on 'SavedSearch' |
|
92 |
db.delete_table('muparse_savedsearch_graphs') |
|
93 |
|
|
94 |
|
|
95 |
models = { |
|
96 |
'muparse.graph': { |
|
97 |
'Meta': {'object_name': 'Graph'}, |
|
98 |
'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['muparse.GraphCategory']"}), |
|
99 |
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
100 |
'name': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'db_index': 'True'}), |
|
101 |
'slug': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}) |
|
102 |
}, |
|
103 |
'muparse.graphcategory': { |
|
104 |
'Meta': {'object_name': 'GraphCategory'}, |
|
105 |
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
106 |
'name': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'db_index': 'True'}) |
|
107 |
}, |
|
108 |
'muparse.node': { |
|
109 |
'Meta': {'object_name': 'Node'}, |
|
110 |
'graphs': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['muparse.Graph']", 'null': 'True', 'through': "orm['muparse.NodeGraphs']", 'blank': 'True'}), |
|
111 |
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['muparse.NodeGroup']"}), |
|
112 |
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
113 |
'name': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'db_index': 'True'}), |
|
114 |
'url': ('django.db.models.fields.CharField', [], {'max_length': '512'}) |
|
115 |
}, |
|
116 |
'muparse.nodegraphs': { |
|
117 |
'Meta': {'object_name': 'NodeGraphs'}, |
|
118 |
'baseurl': ('django.db.models.fields.CharField', [], {'max_length': '512'}), |
|
119 |
'graph': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['muparse.Graph']"}), |
|
120 |
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
121 |
'node': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['muparse.Node']"}), |
|
122 |
'pageurl': ('django.db.models.fields.CharField', [], {'max_length': '512'}) |
|
123 |
}, |
|
124 |
'muparse.nodegroup': { |
|
125 |
'Meta': {'object_name': 'NodeGroup'}, |
|
126 |
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
127 |
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
|
128 |
'url': ('django.db.models.fields.CharField', [], {'max_length': '512'}) |
|
129 |
}, |
|
130 |
'muparse.savedsearch': { |
|
131 |
'Meta': {'object_name': 'SavedSearch'}, |
|
132 |
'description': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
|
133 |
'display_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), |
|
134 |
'graphs': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['muparse.NodeGraphs']", 'null': 'True', 'blank': 'True'}), |
|
135 |
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) |
|
136 |
} |
|
137 |
} |
|
138 |
|
|
139 |
complete_apps = ['muparse'] |
b/settings.py.dist | ||
---|---|---|
136 | 136 |
) |
137 | 137 |
|
138 | 138 |
#CACHE_BACKEND = 'memcached://127.0.0.1:11211/?timeout=50000' |
139 |
MUNIN_NODES = ( |
|
140 |
(1, {'name':'munin1', 'url':"http://munin1.example.com", 'cgi_path': "cgi-bin/munin-cgi-graph/", 'image_path': ''}), |
|
141 |
(2, {'name':'munin2', 'url':"http://munin2.example.com", 'cgi_path': "cgi-bin/munin-cgi-graph/", 'image_path': ''}), |
|
142 |
) |
|
139 | 143 |
MUNIN_URL = "http://munin.example.com" |
140 | 144 |
MUNIN_CGI_PATH = "cgi-bin/munin-cgi-graph/" |
141 | 145 |
MUNIN_IMAGE_PATH = "" |
Also available in: Unified diff