Blog

Мне потребовалось сделать маленький отчетик для нока.

# Create your views here.
from noc.peer.models import AS
from noc.ip.models import Prefix
from noc.lib.app import ExtApplication, view, PermitLogged
class ReportIPbyAS(ExtApplication):
        """
        Reports all ips in AS
        """
        title="IP by AS"
        menu = "Reports | Report IP by AS"
        @view(method=["GET"], url=r'^$', access="view", api=True)
        def view_index(self, request):
                data={}
                ret=[]
                for asn in AS.objects.exclude(asn=0):
                        data={
                        'asn':  asn.asn,
                        'description': asn.description,
                        'prefix_list':[]
                        }
                        for prefix in Prefix.objects.filter(asn=asn, vrf=1).order_by("afi", "prefix"):
                                data['prefix_list'].append({
                                        'afi': prefix.afi,
                                        'prefix':prefix.prefix
                                        })
                        ret.append(data)
                return ret

вот чего получилось.

Комментарии по строчкам.

2,3 не представляют интереса.

4. импортим нужные нам 3 функции. при чем видимо PermitLogged не нужен. (smile) т.к. не используется.

5. определяем свой класс наследуем его от ExtApplication. на выходе будем получать сырой json файл.

6-8 игнорим. дока

9 Как будет называется отчетик в списке

10 в каком меню появится. при этом я положил свой app  в ip/app/reportipbyas. а получил его на выходе в  IPAM/Reports/Report IP by AS

11. определение декоратора @view нужно для того чтобы django регнула его в своих ссылках. тут же указываются права на доступ. (права появится после ./noc sync-perms в консоли) права появятся в типичном месте. api=True надо.

12 не посредственный код вьюхи не интересен. но важно что бы возвращаемый результат был в виде лист словарей то есть что то вроде

[    
    {
    'asn': 127,
    'asn.descr': 'City',
    'prefix_list': [
            {
            'afi': '4', 
            'prefix': '192.168.1.0/24'
            },
                    {
            'afi': '4', 
            'prefix': '192.168.31.0/24'
            }
               ]
    },
    {
    'asn': 122,
    'asn.descr': 'City2',
    'prefix_list': [
            {
            'afi': '4', 
            'prefix': '192.128.1.0/24'
            },
                    {
            'afi': '4', 
            'prefix': '192.118.31.0/24'
            }
               ]
    }
]

тогда получается все гуд.

 

Sometimes you need to compact mongodb

to do that use

# mongo
MongoDB shell version: 2.0.0
connecting to: test
> use noc
switched to db noc
> db.noc.events.active.runCommand("compact")

and so on for all tables

You must use Mongodb 2.0 or above