На вход подаётся csv файл выгрузки с определённым городом. Вданном случае город Ершов. Из хостнейма берётся транскрипция улицы и номер дома.
cvs
fsw-3-Internationalnaya-4854-0-ers,True,engels,activatormain,,Huawei.VRP,ers.fttb.huawei,1.........
Получение геокоординат через cvs файл выгрузки объектов МО
for i in $(sed 1d твой_csv_файл | awk -F\, '{print $1}' | awk -F\- '{printf "ershov+%s+%s\n",$3,$4}'); do echo -ne "${i} "; curl -s http://geocode-maps.yandex.ru/1.x/?geocode="${i}"\&results=1 | grep pos | awk -F\> '{print $2}' | awk -F\< '{print $1}'; done
результат
результат
ershov+yubileynaya+2 48.284366 51.352670
ershov+yubileynaya+3 48.283126 51.351668
ershov+yubileynaya+5 48.282767 51.352405
ershov+yubileynaya+4 48.283584 51.353384
ershov+yubileynaya+4 48.283584 51.353384
ershov+yubileynaya+4 48.283584 51.353384
ershov+yubileynaya+4 48.283584 51.353384
ershov+yubileynaya+6 48.283440 51.354183
Данную информацию можно использовать в дальнейшем для записи её на оборудование в поле sysLocate и автоматическое размещение обьекта на GEO карте в Inventory.
4 Comments
Unknown User (gnu-linux)
2. Геокодирование по почтовому адресу, в примерах адрес указан в custom поле SA MO
postaddress
.2.1 inventory_add_sa_object.py запускать через NOC shel. Геокодирование через сервис Яндекс онлайн.
Если в castom поле SA MO
postaddress
указан адрес типа: "г. Москва, ул.Строителей, д.25, п.2" то скрипт в INV создаёт объект с именем города, в нём объект "PoP | Aggregation" с именем segment (микрорайон города), в объект "PoP | Access" с адресом вместо имени и географическими координатами дома, в нём создаст объект "Room" с названием подъезда, в нём создаст объект 'NoName | Rack | 19" 8U 800mm Shelf' (можно заменить на свой домовой ящик) и в первый свободный в нём юнит положит коммутатор. Все объекты создаются только если их нет в базе, то есть при работе скрипт дописывает в базу INV только новое оборудование.2.2 geocode_mp.py - ещё один старый вариант геокодирования офлайн при наличии карты города в формате mp (польский формат).
Этот скрипт каждому объекту SA ставит в соотведствие точку на карте если в поле SA MO description указан адрес типа: "г.Москва, ул.Строителей, д.25".
Unknown User (e_zombie)
from noc.inv.models.object import Object
from noc.inv.models.objectmodel import ObjectModel
ObjectModel.objects.get(name="PoP | Access")
point_model = ObjectModel.objects.get(name="PoP | Access")
cont = Object.objects.get(name="saratov")
x = 46.016669869422294
y = 51.532775391719845
data = {"geopoint": {"srid": "EPSG:4326", "x": float(x), "y": float(y), }, "pop": {"level": 30} }
p_cont=Object(name="MSK-AP0003", model=point_model, container=cont.id, data=data)
p_cont.save()
где cont = Object.objects.get(name="saratov") объект куда укладывается создаваемая точка.
Unknown User (e_zombie)
from noc.inv.models.object import Object
from noc.inv.models.objectmodel import ObjectModel
f = open('/opt/noc/object.txt', 'r')
assinfire = []
for line in f:
ap = line.split()
assinfire.append(ap)
f.close()
wifi = ManagedObjectProfile.objects.get(name='Ruckus_WiFi')
for mo in tuple(ManagedObject.objects.filter(name__contains="MSK-AP",object_profile=wifi)):
name1 = mo.name
if not Object.objects.filter(name = name1):
for ass in assinfire:
if ass[0] == name1:
x = ass[1]
y = ass[2]
ObjectModel.objects.get(name="PoP | Access")
point_model = ObjectModel.objects.get(name="PoP | Access")
cont = Object.objects.get(name="Wi-Fi")
data = {"geopoint": {"srid": "EPSG:4326", "x": float(x), "y": float(y), }, "pop": {"level": 30} }
p_cont=Object(name=name1, model=point_model, container=cont.id, data=data)
p_cont.save()
Unknown User (sysfar)
Набросаю небольшой мануал.
Для того что бы у вас на карте в Inventory отобразились объекты:
1) Выгрузить в inventory свои МО, для этого нужно корректно работающий get_inventory и настроенная модель для объекта. Я передавал в inventiry параметр sn, мне по нему легче было искать объекты.
2) Сделать общий PoP контейнер.
Пример для г. Москва (общий контейнер PoP - Wi-Fi) обязательно укажите srid и координаты с удобным для вас zoom.
3) Далее, нужно создать PoP контейнеры для каждого объекта MO, я покажу на примере своей сети, будут вопросы, спрашивайте.
После того как все удачно создастся, должно получится что-то типа такого. Пустые PoP контейнеры без объектов.
Как запихнуть свои объекты в нужные контейнеры при условии того что у нас и контейнер и объект имеют одинаковое имя, но при этом разные модели.
Контейнер имеет модель PoP | Access, Id можно глянуть в MongoDB или в shell или
Должно в итоге получится вот так вот.
С тепловой картой пока толком не разобрался, как будет больше информации, допишу.