diff --git a/README.md b/README.md index dd2f36a..6128666 100644 --- a/README.md +++ b/README.md @@ -11,3 +11,4 @@ P.S. Возможно понадобится **Python 3.5** и выше из-з * [Разработка расширений](./docs/dev.md) * [Сбор информации трафика по netflow](./docs/netflow.md) * [Работа с представлениями](./docs/views.md) +* [Карта](./docs/map.md) \ No newline at end of file diff --git a/agent/monitoring_agent.py b/agent/monitoring_agent.py index 95a3944..f54059f 100755 --- a/agent/monitoring_agent.py +++ b/agent/monitoring_agent.py @@ -43,7 +43,7 @@ def validate_status(text): def send_request(ip, status, sign): r = requests.get( - "%(domain)s/dev/on_device_down/" % {'domain': SERVER_DOMAIN}, + "%(domain)s/dev/on_device_event/" % {'domain': SERVER_DOMAIN}, params={ 'ip': ip, 'status': status, diff --git a/devapp/urls.py b/devapp/urls.py index af836d4..13a048e 100644 --- a/devapp/urls.py +++ b/devapp/urls.py @@ -26,5 +26,5 @@ urlpatterns = [ url(r'^search_dev$', views.search_dev), # Monitoring api - url(r'^on_device_down/$', views.OnDevDown.as_view()) + url(r'^on_device_event/$', views.OnDeviceMonitoringEvent.as_view()) ] diff --git a/devapp/views.py b/devapp/views.py index f56ad9c..714db7a 100644 --- a/devapp/views.py +++ b/devapp/views.py @@ -513,7 +513,7 @@ def fix_port_conflict(request, group_id, device_id, port_id): }) -class OnDevDown(global_base_views.AllowedSubnetMixin, global_base_views.HashAuthView): +class OnDeviceMonitoringEvent(global_base_views.AllowedSubnetMixin, global_base_views.HashAuthView): # # Api view for monitoring devices # @@ -535,12 +535,6 @@ class OnDevDown(global_base_views.AllowedSubnetMixin, global_base_views.HashAuth if device_down is None: return {'text': 'Devices with ip %s does not exist' % dev_ip} - if not device_down.is_noticeable: - return {'text': 'Notification for %s is unnecessary' % device_down.ip_address} - - recipients = UserProfile.objects.get_profiles_by_group(device_down.group.pk) - names = list() - if dev_status == 'UP': device_down.status = 'up' notify_text = 'Device %(device_name)s is up' @@ -553,8 +547,15 @@ class OnDevDown(global_base_views.AllowedSubnetMixin, global_base_views.HashAuth else: device_down.status = 'und' notify_text = 'Device %(device_name)s getting undefined status code' + device_down.save(update_fields=['status']) + if not device_down.is_noticeable: + return {'text': 'Notification for %s is unnecessary' % device_down.ip_address} + + recipients = UserProfile.objects.get_profiles_by_group(device_down.group.pk) + names = list() + for recipient in recipients: send_notify( msg_text=gettext(notify_text) % { diff --git a/docs/map.md b/docs/map.md new file mode 100644 index 0000000..d7b555e --- /dev/null +++ b/docs/map.md @@ -0,0 +1,18 @@ +### Маркеры +На карте есть 5 видов маркеров, хранятся файлы этих маркеров в папке *djing/static/img/gmarkers*. +Каждый из них отличается цветом и иконкой в центре. Так зелёный маркер с значком HDD в +центре означает что устройство получило статус *в сети* от мониторинга. Так они выглядят: +* ![UP](../static/img/gmarkers/dev_ok.png) - UP, устройство в сети. +* ![DOWN](../static/img/gmarkers/dev_bug.png) - DOWN | UNREACHABLE, устройство не в сети или +не доступно +* ![undefined](../static/img/gmarkers/dev.png) - устройство имеет не определённый статус, +скорее всего мониторинг ещё не передавал статус этому устройству. +* ![No device](../static/img/gmarkers/flag_black.png) - на этой точке нет ни одного +устройства. Значит надо назначить в настройках карты устройства на эту точку. +* ![rack](../static/img/gmarkers/relay_rack.png) - Это [рэковая стойка](https://ru.wikipedia.org/wiki/Телекоммуникационная_стойка). +Значит на этой точке назначены несколько устройств. + +### Список групп +Справа есть блок в котором перечислены список групп, созданных в меню *Группы*, при нажатии +на какую-либо из элементов этого списка будут показаны все точки, устройства которых +состоят в этой группе. diff --git a/mapapp/locale/ru/LC_MESSAGES/django.po b/mapapp/locale/ru/LC_MESSAGES/django.po index d54d877..fa39597 100644 --- a/mapapp/locale/ru/LC_MESSAGES/django.po +++ b/mapapp/locale/ru/LC_MESSAGES/django.po @@ -165,3 +165,9 @@ msgstr "Геоточка не найдена" #, python-format msgid "Map point '%(title)s' has been deleted" msgstr "Геоточка '%(title)s' была удалена" + +msgid "Please allow popups for this website" +msgstr "Разрешите сайту открывать всплывающие окна" + +msgid "Help" +nsgstr "Справка" diff --git a/mapapp/templates/maps/ya_index.html b/mapapp/templates/maps/ya_index.html index f444c76..5348765 100644 --- a/mapapp/templates/maps/ya_index.html +++ b/mapapp/templates/maps/ya_index.html @@ -17,26 +17,47 @@ plcmrk.properties.set('balloonContent', html); } + function open_in_new_window(e){ + var data = e.get('target').properties._data; + var win = window.open("{% url 'mapapp:to_single_dev' %}?dot_id=" + data.dot_id, '_blank'); + if (win) + win.focus(); + else + showErr("{% trans 'Please allow popups for this website' %}"); + } + function load_dots(r){ for(let e of r){ - var iconname='flag_black.png'; - if(e.devcount > 0) - iconname='dev_ok.png'; + var iconname = 'dev.png';; + var click_callback = placemark_click; + if(e.devcount > 1){ + iconname='relay_rack.png'; + }else if(e.devcount == 1){ + var dev = e.device; + console.log(dev.status); + if(dev.status == 'unr' || dev.status == 'dwn') + iconname='dev_bug.png'; + else if(dev.status == 'up') + iconname='dev_ok.png'; + click_callback = open_in_new_window; + }else{ + iconname='flag_black.png'; + } dot_place([e.latitude, e.longitude], { hintContent: e.title, dot_id: e.pk - }, iconname); + }, click_callback, iconname); } } - function dot_place(pos, opts, icon_name='dev_ok.png'){ + function dot_place(pos, opts, click_callback, icon_name='dev_ok.png'){ var dot = new ymaps.Placemark(pos, opts, { iconLayout: 'default#image', iconImageHref: '/static/img/gmarkers/'+icon_name, iconImageSize: [32, 48], iconImageOffset: [-16, -48] }); - dot.events.add('click', placemark_click); + dot.events.add('click', click_callback); myMap.geoObjects.add(dot); } @@ -52,7 +73,7 @@ dot_place([d.latitude, d.longitude], { hintContent: d.title, dot_id: d.pk - }); + }, placemark_click); } function add_dot(e){ @@ -142,7 +163,10 @@