Рубрики
Без рубрики

Создайте монитор веб-трафика с Django и IPStack

В современном онлайн-мире важно знать, где находится трафик вашего сайта, чтобы … Tagged с Python, WebDev, CodeNewbie, Django.

В современном онлайн-мире важно знать, откуда приходит ваш сайт трафика, чтобы помочь владельцам сайта лучше понять своих посетителей. В этом руководстве мы строим очень базовый монитор трафика, монитор трафика отобразит подробную информацию о посетителей на сайте. Для каждого посетителя будет несколько столбцов, таких как время посещения, континента, страны и города. Эта статья была первоначально опубликована в моем блоге, Пиксельный район Отказ

Начало работы с IPStack API

IPSTACK Предлагает мощный IP-API в режиме реального времени в режиме геолокации в режиме геолокации в режиме реального времени, способное найти точное местоположение данных и оценивать угрозы безопасности, возникающие из рискованных IP-адресов. Результаты поставляются в миллисекундах в формате JSON или XML. Использование IPStack API вы сможете найти посетителей сайта на первый взгляд и настроить свой пользовательский опыт и приложение соответствующим образом.

Документация подробно описывает функции API, доступные параметры и направляющие интеграции на разных языках программирования.

Получить Бесплатно Клавиша доступа API для продолжения использования этого API.

Образец ответа API

Отзывы API IPStack поставляются с всесторонними данными, связанными с местоположением, данные, связанные с валютами, данные, связанные с цифровой зоной, данные, связанные с подключением и данные, связанные с безопасностью. Посмотрите на пример ниже.

Обратите внимание: для иллюстрации, которые мы включили как поиск имени хоста и модуль безопасности в ответе вышеуказанной API. Пожалуйста, обратитесь к разделам Инажем хоста имена и Безопасность Модуль для деталей.

{
  "ip": "134.201.250.155",
  "hostname": "134.201.250.155",
  "type": "ipv4",
  "continent_code": "NA",
  "continent_name": "North America",
  "country_code": "US",
  "country_name": "United States",
  "region_code": "CA",
  "region_name": "California",
  "city": "Los Angeles",
  "zip": "90013",
  "latitude": 34.0453,
  "longitude": -118.2413,
  "location": {
    "geoname_id": 5368361,
    "capital": "Washington D.C.",
    "languages": [
        {
          "code": "en",
          "name": "English",
          "native": "English"
        }
    ],
    "country_flag": "https://assets.ipstack.com/images/assets/flags_svg/us.svg",
    "country_flag_emoji": "🇺🇸",
    "country_flag_emoji_unicode": "U+1F1FA U+1F1F8",
    "calling_code": "1",
    "is_eu": false
  },
  "time_zone": {
    "id": "America/Los_Angeles",
    "current_time": "2018-03-29T07:35:08-07:00",
    "gmt_offset": -25200,
    "code": "PDT",
    "is_daylight_saving": true
  },
  "currency": {
    "code": "USD",
    "name": "US Dollar",
    "plural": "US dollars",
    "symbol": "$",
    "symbol_native": "$"
  },
  "connection": {
    "asn": 25876,
    "isp": "Los Angeles Department of Water & Power"
  },
  "security": {
    "is_proxy": false,
    "proxy_type": null,
    "is_crawler": false,
    "crawler_name": null,
    "crawler_type": null,
    "is_tor": false,
    "threat_level": "low",
    "threat_types": null
  }
}

Предварительные условия

После лучших практик Python мы создадим виртуальную среду для нашего проекта и установим необходимые пакеты.

Во-первых, создайте каталог проекта.

$ mkdir djangoapp
$ cd djangoapp

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

Для MacOS и UNIX Systems:

$ python3 -m venv myenv
$ source myenv/bin/activate
(myenv) $ pip install django requests

Для Windows:

$ python3 -m venv myenv
$ myenv\Scripts\activate
(myenv) $ pip install django requests

Настройка вашего приложения Django

Во-первых, перейдите к каталогу DjangoApp мы создали и установили проект Django.

(myenv) $ django-admin startproject mainapp

Это будет автоматически генерировать некоторые файлы для вашего проекта Скелет:

mainapp/
    manage.py
    mainapp/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

Теперь перейдите к каталогу, который вы только что создали (убедитесь, что вы находитесь в одном каталоге, что и Manage.py) и создайте каталог приложений.

(myenv) $ python manage.py startapp monitor

Это создаст следующее:

monitor/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

В файле mainapp/settings.py ищите следующую строку и добавьте приложение, которое мы только что создали выше.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'monitor', #new line
]

Убедитесь, что вы находитесь в каталоге монитора, создайте новый каталог, называемый шаблонами и новым файлом, называемым URLS.PY. Ваша структура каталога приложения монитора должна выглядеть так

monitor/
    __init__.py
    admin.py
    apps.py
    migrations/
    templates/
        __init__.py
    models.py
    tests.py
    urls.py
    views.py

Убедитесь, что ваш файл MainApp/URLS.PY добавьте наш монитор URL-адрес приложения для включения URL-адресов, которые мы должны создавать следующие в приложении монитора:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    #path('admin/', admin.site.urls),
    path('', include('monitor.urls')),#monitor app url
]

Теперь, на мониторе/URLS.PY файле, добавьте наш сайт там:

from django.urls import path, include
from . import views

urlpatterns = [
    path('', views.home, name="home"),
    path('monitor/', views.monitor, name="monitor"), #system monitor view to be created next
]

Создайте нашу модели базы данных, которые мы будем использовать информацию о сохранении посетителей нашего сайта. На мониторе/моделях .py файл:

from django.db import models

# Create your models here.
class Monitor(models.Model):
    continent = models.CharField(max_length=50, blank=True, null=True)
    country = models.CharField(max_length=50, blank=True, null=True)
    city = models.CharField(max_length=50, blank=True, null=True)
    capital = models.CharField(max_length=50, blank=True, null=True)
    datetime = models.DateField(max_length=50, blank=True, null=True)
    ip = models.CharField(max_length=50, blank=True, null=True)

    def __str__(self):
        return self.ip

Теперь на мониторе/Views.py файл добавьте строки ниже:

from django.shortcuts import render, redirect
import requests
import time
import psutil
import os
from datetime import datetime
from .models import Monitor
from urllib.parse import urlparse
from django.core.paginator import Paginator

#traffic monitor
def traffic_monitor(request):
    dataSaved = Monitor.objects.all().order_by('-datetime')
    # Getting loadover15 minutes 
    load1, load5, load15 = psutil.getloadavg()
    cpu_usage = int((load15/os.cpu_count()) * 100)
    ram_usage = int(psutil.virtual_memory()[2])
    p = Paginator(dataSaved, 100)
    #shows number of items in page
    totalSiteVisits = (p.count)
    #find unique page viewers & Duration
    pageNum = request.GET.get('page', 1)
    page1 = p.page(pageNum)
    #unique page viewers
    a = Monitor.objects.order_by().values('ip').distinct()
    pp = Paginator(a, 10)
    #shows number of items in page
    unique = (pp.count)
    #update time
    now = datetime.now()
    data = {
        "now":now,
        "unique":unique,
        "totalSiteVisits":totalSiteVisits,
        "cpu_usage": cpu_usage,
        "ram_usage": ram_usage,
        "dataSaved": page1,
    }
    return render(request, 'traffic_monitor.html', data)
#home page
def home(request):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[0]
    else:
        ip = request.META.get('REMOTE_ADDR')
    response = requests.get('http://api.ipstack.com/'+ip+'?access_key=GETYOURACCESSKEY') #change from HTTP to HTTPS on the IPSTACK API if you have a premium account
    rawData = response.json()
    print(rawData) # print this out to look at the response
    continent = rawData['continent_name']
    country = rawData['country_name']
    capital = rawData['city']
    city = rawData['location']['capital']
    now = datetime.now()
    datetimenow = now.strftime("%Y-%m-%d %H:%M:%S")
    saveNow = Monitor(
        continent=continent,
        country=country,
        capital=capital,
        city=city,
        datetime=datetimenow,
        ip=ip
    )
    saveNow.save()
    return render(request, 'home.html')

В вышеуказанном виде на главном представлении код начинается, получая IP-адрес пользователей. При получении посетителей IP-адреса мы затем сделаем запрос на IPStack с IP-адресом выше, добавленным к запросу и хранит результаты в базе данных. Если вы хотите собрать больше информации, просто добавьте их на модели и добавьте переменную, как описано выше с соответствующими данными, которые вы собираете, например, страна.

Для представления монитора движения код начинает покупать все данные на таблице монитора и отображает данные на HTML-странице, которую мы создадим ниже. Код также собирает CPU и использование оперативной памяти системы. Давайте теперь перейдем к оказанию данных выше на нашей веб-странице.

В папке монитора/шаблонов создайте Tharding_Monitor.html и home.html веб-страницу и добавьте строки ниже:

Монитор/шаблоны/Traffic_monitor.html Файл:




  
    
    
    
    
    ALienx – Connections
    
    
    
    

    
    
  

  

    

Site Visitors and Resources Monitor

Contact developer if CPU & RAM USAGE exceeds 80%


CPU Usage
{{ cpu_usage }}%

RAM Usage
{{ ram_usage }}%

Total Site Visits
{{ totalSiteVisits }}

Unique Page Views
{{ unique }}

User Sessions
{% for data in dataSaved.object_list %} {% endfor %}
Time IP Address Continent Country City
Time IP Address Continent Country City
{{ data.datetime }} {{ data.ip }} {{ data.continent }} {{ data.country }} {{ data.city }}

На мониторе/шаблонах/home.html Файл:




  
    
    
    

    
    

    Hello, world!
  
  
    

Hello, world!

Тестирование, если это работает!

Миграция, затем запустите сервер, запустив команды ниже, а затем навигации по соответствующему порту:

(myenv) $ python manage.py makemigrations
(myenv) $ python manage.py migrate
(myenv) $ python manage.py runserver

Ниже приведен снимок моей реализации:

Спасибо за прочтение!

Я надеюсь, что вам понравился этот блог так же, как и я, в случае какого-либо вопроса, не стесняйтесь просить в разделе «Комментарий» ниже. Примечание, вы можете играть с этими данными, как вам нравится, например, добавление фильтра диапазона дат, чтобы показать посетителям по дате или показывать посетителям по стране.

Оригинал: "https://dev.to/paulwababu/build-a-web-traffic-monitor-with-django-and-ipstack-3n2g"