Мне потребовалось сделать маленький отчетик для нока.
# 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 не нужен. т.к. не используется.
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