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