Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf8 -*-
- # Create your views here.
- from django.http import HttpResponse
- import datetime, time
- import cherry.db
- import json
- from loki.conf.path_config import path_to_reports_by_traffic_by_money
- from django.views.decorators.csrf import csrf_exempt
- from loki.apps.inet.models import NetflowReportQueue, SessionDisconnectQueue
- import hashlib
- from loki.daemons.netflow_reportd import NetflowReport
- import os
- from django.db import connections
- path_to_reports = path_to_reports_by_traffic_by_money
- def kill_sessions_by_id(id):
- """
- Убить сессию вручную по идентификатору.
- """
- try:
- s = SessionDisconnectQueue()
- s.session = id
- s.processed_datetime = None
- s.disconnect_reason = 5
- s.save()
- return 0
- except Exception, e:
- return None
- def connect_to_cherry():
- """
- Возвращает курсор на БД
- """
- return cherry.db.INFERNO_CHERRY().cursor()
- def hev(a):
- """
- Функция Хевисайда
- """
- if a >0:
- return a
- else:
- return 0
- def overhead(a,b):
- """
- Функция оверхеда
- """
- if a>b:
- return 0
- else:
- return a
- class Response(object):
- """
- Класс универсального ответа в JSON
- """
- def __init__(self, error, error_str, data):
- self.error = error
- self.error_str = error_str
- self.data = data
- def serialize(self):
- return json.dumps(self.__dict__, sort_keys=True, indent=4)
- def __str__(self):
- return self.serialize()
- @csrf_exempt
- def check_password(request):
- """
- Проверка пароля для client_id. На входе клинт_ид и пароль.
- """
- if request.method == 'POST':
- client_id = request.POST.get('client_id')
- password = request.POST.get('password')
- if client_id is None or client_id == '':
- return HttpResponse(Response('-1', 'client_id is None', []))
- if password is None or password == '':
- return HttpResponse(Response('-1', 'password is None', []))
- try:
- curr = connect_to_cherry()
- except Exception, e:
- return HttpResponse(Response('-1', 'Database is dead becouse: %s' % e, []))
- curr.execute("""SELECT client_id, password
- FROM base_clients
- WHERE client_id = %s
- AND password = %s
- AND client_type in ('person', 'profit_org', 'non_profit_org')""",
- (client_id, password))
- rows = curr.fetchall()
- curr.close()
- if len(rows) > 0:
- return HttpResponse(Response('0', 'Password is correct', rows))
- else:
- return HttpResponse(Response('-1', 'Password or client_id is incorrect', rows))
- elif request.method == 'GET':
- return HttpResponse('This is secure branch.')
- @csrf_exempt
- def get_services(request):
- """
- Получение списка услуг привязанных к client_id. Только inet_static_ip.
- """
- if request.method == 'POST':
- client_id = request.POST.get('client_id')
- if client_id is None or client_id == '':
- return HttpResponse(Response('-1', 'client_id is None', []))
- try:
- curr = connect_to_cherry()
- except Exception, e:
- return HttpResponse(Response('-1', 'Database is dead becouse: %s' % e, []))
- curr.execute("""SELECT s.id,
- CASE WHEN s.user_id ~ 'ip_grp'
- THEN (select textcat_all(gi.ip || ', ')
- FROM inet_fixed_ip_group_items as gi
- WHERE gi.ip_group = user_id)
- ELSE s.user_id END,
- s.date_create, s.date_expire, tp.descr
- FROM inet_fixed_ip_services as s
- LEFT JOIN inet_fixed_ip_tariff_plans as tp
- ON (s.tariff_plan = tp.tariff_plan and s.oper_id = tp.oper_id)
- WHERE client_id = %s """, (client_id,))
- rows = curr.fetchall()
- curr.close()
- res = {}
- if len(rows) > 0:
- ans = []
- for row in rows:
- tmp = []
- for r in row:
- if type(r) == type(u''):
- r = r.encode('utf-8').strip()
- if type(r) == type(datetime.datetime.today()):
- r = str(r).strip()
- if type(r) == type(123):
- r = str(r).strip()
- tmp.append(r)
- tmp.append('inet_static_ip')
- tmp = dict(zip(['service_id', 'ips', 'date_start', 'date_end', 'tariff_plan_name', 'type'], tmp))
- ans.append(tmp)
- res = ans
- return HttpResponse(Response('0', 'Ok', res))
- else:
- return HttpResponse(Response('-1', 'There is no inet_static_ip services.', []))
- elif request.method == 'GET':
- return HttpResponse('This is secure branch.')
- @csrf_exempt
- def get_netflow_report(request):
- """
- Добавление запроса на отчет по Netflow в очередь.
- Если всё хорошо, вернет «All correct: job is added.»
- """
- if request.method == 'POST':
- date_from = request.POST.get('date_start')
- date_to = request.POST.get('date_end')
- ips = request.POST.get('ips')
- in_out = request.POST.get('in_out')
- email = request.POST.get('email')
- login = request.POST.get('login')
- internal = request.POST.get('internal')
- if date_from is None or date_from == '':
- return HttpResponse(Response('-1', 'date_start is None', []))
- if date_to is None or date_to == '':
- return HttpResponse(Response('-1', 'date_end is None', []))
- if ips is None or ips == '' or ips == 'None':
- return HttpResponse(Response('-1', 'ips is None', []))
- if in_out is None or in_out == '':
- return HttpResponse(Response('-1', 'in_out is None', []))
- if email is None or email == '':
- return HttpResponse(Response('-1', 'email is None', []))
- if login is None or login == '':
- return HttpResponse(Response('-1', 'login is None', []))
- try:
- date_from = datetime.datetime.fromtimestamp(time.mktime(time.strptime(date_from, "%Y-%m-%d %H:%M:%S")))
- except Exception, e:
- return HttpResponse(Response('-1', 'date_start is not valid: %s'%e, []))
- try:
- date_to = datetime.datetime.fromtimestamp(time.mktime(time.strptime(date_to, "%Y-%m-%d %H:%M:%S")))
- except Exception, e:
- return HttpResponse(Response('-1', 'date_end is not valid: %s'%e, []))
- if date_to < date_from:
- return HttpResponse(Response('-1', 'date_end should be > date_start.', []))
- if in_out == 'None':
- in_out = None
- elif in_out == 'False':
- in_out = False
- elif in_out == 'True':
- in_out = True
- else:
- return HttpResponse(Response('-1', 'in_out should be True, False or None', []))
- try:
- report = NetflowReportQueue()
- report.date_from = date_from
- report.date_to = date_to
- report.ip = str(ips)
- report.in_out = in_out
- report.email = email
- report.login = login
- report.md5sum = hashlib.md5(str(date_from)+str(date_to)+str(login)+str(ips)+str(in_out)).hexdigest()
- report.insert_date = datetime.datetime.today()
- report.internal = True
- report.save()
- except Exception, e:
- return HttpResponse(Response('-1', e, []))
- return HttpResponse(Response('0', 'All correct: job is added.', []))
- elif request.method == 'GET':
- return HttpResponse('This is secure branch.')
- @csrf_exempt
- def get_traffic_report_by_money(request):
- try:
- return get_traffic_report_by_money_real(request)
- except:
- import traceback
- exc = traceback.format_exc()
- return HttpResponse( str(exc) )
- def get_traffic_report_by_money_real(request):
- """
- Это ёбаный мрак :( без острой необходимости, читать не советуется.
- Запрос на отчет по трафику по деньгам.
- Вьюху можно дергать несколько раз, как только отчет будет готов, она вернет его.
- """
- if request.method == 'GET':
- try:
- date_start = request.GET.get('date_start').strip()
- date_end = request.GET.get('date_end').strip()
- login = request.GET.get('login').strip()
- except Exception, e:
- return HttpResponse(Response('-1', str(e), []))
- if request.method == 'POST':
- date_start = request.POST.get('date_start').strip()
- date_end = request.POST.get('date_end').strip()
- login = request.POST.get('login').strip()
- client_id = request.POST.get('client_id').strip()
- try:
- datetime.datetime.strptime(date_start, "%Y-%m-%d %H:%M:%S")
- datetime.datetime.strptime(date_end, "%Y-%m-%d %H:%M:%S")
- except Exception, e:
- return HttpResponse(Response('-1', str(e), []))
- user_id = (login,)
- try:
- cursor = connect_to_cherry()
- except Exception, e:
- return HttpResponse(Response('-1', 'Database Cherry is dead becouse: %s' % e, []))
- if request.method == 'POST':
- try:
- cursor.execute("""SELECT
- CASE WHEN s.user_id ~ 'ip_grp'
- THEN (select textcat_all(gi.ip || ', ')
- FROM inet_fixed_ip_group_items as gi
- WHERE gi.ip_group = user_id)
- ELSE s.user_id END
- FROM inet_fixed_ip_services as s
- LEFT JOIN inet_fixed_ip_tariff_plans as tp
- ON (s.tariff_plan = tp.tariff_plan and s.oper_id = tp.oper_id)
- WHERE client_id IN %s""", (tuple(client_id.split(',')),) )
- rows = cursor.fetchall()
- s = 0
- for row in rows:
- rw = str(row[0]).split(',')
- for r in rw:
- if login.lower().strip() == r.lower().strip():
- s = 1
- break
- if s == 0:
- return HttpResponse(Response('-1', 'Login is not for you!',[]))
- except Exception, e:
- return HttpResponse(Response('-1', 'Query fail: %s' % e, []))
- filename = hashlib.sha224(date_start+date_end+str(user_id)).hexdigest() + '.csv'
- if not os.path.exists(os.path.join(path_to_reports,filename)) and not os.path.exists(os.path.join(path_to_reports,filename+'.lock')):
- o = open(os.path.join(path_to_reports, filename), 'wr+')
- lockfile = open(os.path.join(path_to_reports,filename+'.lock'), 'wr+')
- lockfile.close()
- ie_global = il_global = oe_global = 0
- try:
- loki_cursor = connections['default'].cursor()
- except Exception, e:
- return HttpResponse(Response('-1', 'Database Loki is dead becouse: %s' % e, []))
- if request.method == 'GET':
- print>>o, ';'.join(['Дата/время сессии', 'Логин', 'Ресурс', 'Тип трафика', 'Сумма в рублях'])
- cursor.execute("""SELECT session_id, session_type, session_begin, session_long, user_id, resource, tariff_zone, amount
- FROM base_sessions_view
- WHERE user_id IN %s
- AND session_begin >= %s AND session_begin_calc >= %s
- AND session_begin < %s AND session_begin_calc < %s
- AND session_id ~'lk_' order by 3;""", (user_id, date_start, date_start, date_end, date_end))
- rows = cursor.fetchall()
- for row in rows:
- service = row[0].split('_')
- if row[0].find('lk_s_du') > -1:
- loki_cursor.execute("""select tariff_id from inet_inetsessionlog where id = %s;""", (service[-1],))
- tariff_id = str(loki_cursor.fetchall()[0][0])
- else:
- if row[1] == 'inet_dynamic_ip':
- cursor.execute('select tariff_plan from inet_dynamic_ip_services where id = %s', (service[-1],))
- tariff = str(cursor.fetchall()[0][0])
- elif row[1] == 'inet_fixed_ip':
- if row[0].split('_')[-1].find('.') == -1:
- cursor.execute('select tariff_plan from inet_fixed_ip_services where id = %s', (service[-1],))
- else:
- cursor.execute('select tariff_plan from inet_fixed_ip_services where id = %s', (service[-2],))
- tariff = str(cursor.fetchall()[0][0])
- loki_cursor.execute("select tariff_ptr_id from inet_inettariff where cherry_id = %s", (tariff,))
- tariff_id = str(loki_cursor.fetchall()[0][0])
- loki_cursor.execute("select * from inet_inettariff where tariff_ptr_id = %s", (tariff_id,))
- tariff = loki_cursor.fetchall()[0]
- tariff = dict(zip(('tariff_ptr_id', 'price_per_unit', 'is_dynamic', 'cherry_id', 'ie_price_first', 'ie_price_second', 'ie_price_switch', 'oe_price_first', 'oe_price_second', 'oe_price_switch', 'il_price_first', 'il_price_second', 'il_price_switch', 'ol_price_first', 'ol_price_second', 'ol_price_switch'), tariff))
- if row[0].find('lk_s_du') > -1 or row[0].find('lk_s_su') > -1:
- price = ''
- if row[6] == 'incoming_external':
- if tariff['ie_price_second'] == 0:
- price = row[5] * tariff['ie_price_first'] / 102400
- elif ie_global > tariff['ie_price_switch']:
- price = row[5] * tariff['ie_price_second'] / 102400
- else:
- price = overhead(tariff['ie_price_switch']-ie_global,tariff['ie_price_switch'])*tariff['ie_price_first'] / 102400 + hev((row[5]+ie_global-tariff['ie_price_switch']))*tariff['ie_price_second'] / 102400
- ie_global += row[5]
- unit = 'kb'
- if tariff['price_per_unit'] == 1:
- price = price /1024
- unit = 'mb'
- if tariff['price_per_unit'] == 2:
- price = price /1024/1024
- unit = 'gb'
- if tariff['price_per_unit'] == 3:
- price = price /1024/1024/1024
- unit = 'tb'
- if row[6] == 'internal':
- if tariff['il_price_second'] == 0:
- price = row[5] * tariff['il_price_first'] / 102400
- elif il_global > tariff['il_price_switch']:
- price = row[5] * tariff['il_price_second'] / 102400
- else:
- price = overhead(tariff['il_price_switch']-il_global,tariff['il_price_switch'])*tariff['il_price_first'] / 102400 + hev((row[5]+il_global-tariff['il_price_switch']))*tariff['il_price_second'] / 102400
- il_global += row[5]
- unit = 'kb'
- if tariff['price_per_unit'] == 1:
- price = price /1024
- unit = 'mb'
- if tariff['price_per_unit'] == 2:
- price = price /1024/1024
- unit = 'gb'
- if tariff['price_per_unit'] == 3:
- price = price /1024/1024/1024
- unit = 'tb'
- if row[6] == 'outgoing_any':
- if tariff['oe_price_second'] == 0:
- price = row[5] * tariff['oe_price_first'] / 102400
- elif oe_global > tariff['oe_price_switch']:
- price = row[5] * tariff['oe_price_second'] / 102400
- else:
- price = overhead(tariff['oe_price_switch']-oe_global,tariff['oe_price_switch'])*tariff['oe_price_first'] / 102400 + hev((row[5]+oe_global-tariff['oe_price_switch']))*tariff['oe_price_second'] / 102400
- oe_global += row[5]
- unit = 'kb'
- if tariff['price_per_unit'] == 1:
- price = price /1024
- unit = 'mb'
- if tariff['price_per_unit'] == 2:
- price = price /1024/1024
- unit = 'gb'
- if tariff['price_per_unit'] == 3:
- price = price /1024/1024/1024
- unit = 'tb'
- price = str(price).replace('.',',')
- if login in row[0]:
- print>>o, (str(row[2]) + ';' + row[4] + ';' + str(row[5]).replace('.000000', '').replace('.', ',') + ';' + row[6] + ';' + str(price)).decode('utf-8').replace(u'incoming_external', u'Входящий внешний').replace(u'internal', u'Внутренний').replace(u'outgoing_any',u'Исходящий внешний').encode('utf-8')
- else:
- print>>o, (str(row[2]) + ';' + row[4] + ';' + str(row[5]).replace('.000000', '').replace('.', ',') + ';' + row[6] + ';' + str(price)).decode('utf-8').replace(u'incoming_external', u'Входящий внешний').replace(u'internal', u'Внутренний').replace(u'outgoing_any',u'Исходящий внешний').replace(date_start,u'Суммарно').encode('utf-8')
- else:
- price = str(row[7]).replace('.',',')
- if login in row[0]:
- print>>o, (str(row[2]) + ';' + row[4] + ';' + str(row[5]).replace('.000000', '').replace('.', ',') + ';' + row[6] + ';' + str(price)).decode('utf-8').replace(u'incoming_external', u'Входящий внешний').replace(u'internal', u'Внутренний').replace(u'outgoing_any',u'Исходящий внешний').encode('utf-8')
- else:
- print>>o, (str(row[2]) + ';' + row[4] + ';' + str(row[5]).replace('.000000', '').replace('.', ',') + ';' + row[6] + ';' + str(price)).decode('utf-8').replace(u'incoming_external', u'Входящий внешний').replace(u'internal', u'Внутренний').replace(u'outgoing_any',u'Исходящий внешний').replace(date_start,u'Суммарно').encode('utf-8')
- cursor.close()
- loki_cursor.close()
- o.close()
- os.remove(os.path.join(path_to_reports,filename+'.lock'))
- if request.method == 'POST':
- s = open(os.path.join(path_to_reports,filename), 'r+').readlines()
- resp = Response('0', 'Report in JSON', [dict(zip(['date', 'login', 'resource', 'type', 'amount'],x.replace('\n','').split(';'))) for x in s])
- return HttpResponse(resp)
- elif request.method == 'GET':
- response = HttpResponse(open(os.path.join(path_to_reports, filename), 'rb'), mimetype='application/vnd.ms-excel')
- response['Content-Disposition'] = 'attachment; filename=%s' % filename + '.csv'
- response['Cache-Control'] = 'no-cache'
- return response
- elif os.path.exists(filename+'.lock'):
- return HttpResponse(Response('1', 'Report is generating', []))
- elif not os.path.exists(filename+'.lock'):
- if request.method == 'POST':
- s = open(os.path.join(path_to_reports,filename), 'r+').readlines()
- resp = Response('0', 'Report in JSON', [dict(zip(['date', 'login', 'resource', 'type', 'amount'],x.replace('\n','').split(';'))) for x in s])
- return HttpResponse(resp)
- elif request.method == 'GET':
- response = HttpResponse(open(os.path.join(path_to_reports,filename), 'rb'), mimetype='application/vnd.ms-excel')
- response['Content-Disposition'] = 'attachment; filename=%s' % filename + '.csv'
- response['Cache-Control'] = 'no-cache'
- return response
- ################################################################################
- # Функционал для тарифов
- ################################################################################
- from models import InetSessionAcceptedTest, InetSessionRejectedTest, InetSessionActiveTest, InetTariff
- from django.http import HttpResponseRedirect #, HttpResponse
- from django.shortcuts import render_to_response
- from django.core.urlresolvers import reverse
- from django.contrib.auth.decorators import login_required
- from django.template import RequestContext
- from django.core.paginator import Paginator, InvalidPage, EmptyPage
- from forms import CreateTarifForm
- from common.utils import pagination_process, search_process
- @login_required
- def create_tarif(request, id=''):
- ctx = RequestContext(request)
- ctx['form'] = CreateTarifForm()
- ctx['mode'] = 'Создать'
- obj = None
- try:
- obj = InetTariff.objects.get(id=int(id))
- ctx['form'] = CreateTarifForm(instance=obj)
- ctx['mode'] = 'Редактировать'
- ctx['id'] = id
- except:
- ctx['form'] = CreateTarifForm()
- if request.method == 'POST':
- ctx['form'] = CreateTarifForm(request.POST, instance=obj)
- if ctx['form'].is_valid():
- try:
- ctx['form'].save()
- return HttpResponseRedirect( reverse('_tarif_list') )
- except:
- #import traceback
- #exc = traceback.format_exc()
- #return HttpResponse( str(exc) )
- ctx['errors'] = 'Невозможно создать тариф. Ошибка модели.'
- else:
- ctx['errors'] = 'Невозможно создать тариф. Ошибка валидации. Корректно заполните поля.'
- return render_to_response('inet/create_tarif.html', context_instance = ctx)
- @login_required
- def tarif_list(request):
- ctx = RequestContext(request)
- search_process(ctx, InetTariff, request, 'name', 'inet.models.InetTariff')
- pagination_process(ctx, request)
- return render_to_response('inet/tarif_list.html', context_instance = ctx)
- def delete_tarif(request, id):
- ctx = RequestContext(request)
- try:
- o = InetTariff.objects.get(pk=int(id))
- o.delete()
- except:
- ctx['errors'] = 'Не удалось удалить тариф!'
- return HttpResponseRedirect( reverse('_tarif_list') )
- ################################################################################
- # Функционал для мониторинга подключений
- ################################################################################
- from django.db.models import Q
- from django.utils import simplejson as json
- from forms import AuthRequestParamsForm
- TIMEDELTA = {
- '1': datetime.timedelta(seconds=60),
- '2': datetime.timedelta(seconds=300),
- '3': datetime.timedelta(seconds=600),
- '4': datetime.timedelta(seconds=900),
- '5': datetime.timedelta(seconds=1800)
- }
- def auth_obj_sort(a, b):
- if a.time < b.time:
- return 1
- if a.time > b.time:
- return -1
- @login_required
- def monitoring_default(request):
- ctx = RequestContext(request)
- params = None
- filters = Q()
- top = 100
- min = datetime.datetime.now()
- #min = datetime.datetime.now() - datetime.timedelta(days=60)
- if request.method == 'POST':
- if request.POST.get('reset', False):
- params = None
- else:
- params = request.POST
- username = params.get('username', False)
- limit = params.get('limit', False)
- if username:
- filters = filters & Q(login=username)
- if limit:
- min = datetime.datetime.now() - TIMEDELTA.get(limit, datetime.timedelta(0))
- filters = filters & Q(time__gt=min)
- ctx['auth_obj'] = list(InetSessionAcceptedTest.objects.all().filter(filters))
- ctx['auth_obj'] += list(InetSessionRejectedTest.objects.all().filter(filters))
- ctx['auth_obj'].sort(auth_obj_sort)
- #ctx['auth_obj'] = ctx['auth_obj'][:top]
- ctx['form'] = AuthRequestParamsForm(params)
- #ctx['timestamp'] = int(time.time())
- ctx['timestamp'] = time.time()
- return render_to_response('inet/connection_monitoring.html', context_instance = ctx)
- @login_required
- def monitoring_get_new_connections(request):
- response = HttpResponse()
- response['Content-type'] = 'text/javascript; charset=utf-8'
- top = 200
- username = request.GET.get('username', False)
- #limit = request.GET.get('limit', False)
- try:
- timestamp = float(request.GET.get('timestamp'))
- except:
- timestamp = False
- if not timestamp:
- response.write(json.dumps({u'message': u'Ошибка входных данных', u'code': 1, u'newtimestamp': time.time()}))
- return response
- filters = Q(time__gt=datetime.datetime.fromtimestamp(timestamp))
- #filters = Q(time__gt=(datetime.datetime.now() - datetime.timedelta(days=100)))
- if username:
- filters = filters & Q(login=username)
- items = list(InetSessionRejectedTest.objects.all().filter(filters))
- items += list(InetSessionAcceptedTest.objects.all().filter(filters))
- obj = {u'items':[], u'newtimestamp': timestamp, u'message': u'Успешный запрос', u'code': 0}
- if len(items) < 1:
- obj['message'] = u'Нет данных по запросу.'
- obj['code'] = 3
- response.write(json.dumps(obj))
- return response
- if len(items) > top:
- obj['message'] = u'Слишком много объектов! Уменьшите диапазон!'
- obj['code'] = 2
- obj['newtimestamp'] = time.time()
- response.write(json.dumps(obj))
- return response
- items.sort(auth_obj_sort)
- #items = items[:top]
- newtimestamp = 0.0
- for item in items:
- if item.time > datetime.datetime.fromtimestamp(newtimestamp):
- newtimestamp = time.mktime(item.time.timetuple())
- auth_type = item.get_inet_session_auth_type()
- tmp = {}
- tmp['time'] = item.time.strftime('%d %b %Y %H:%M:%S')
- tmp['login'] = unicode(item.login)
- tmp['auth_type'] = unicode(auth_type)
- tmp['nas'] = unicode(item.nas)
- tmp['mac'] = unicode(item.mac)
- #tmp['service'] = unicode(item.service)
- try:
- tmp['tariff'] = unicode(item.tariff)
- tmp['speed_profile'] = unicode(item.speed_profile)
- tmp['processed_by_snmp_checker'] = unicode(item.processed_by_snmp_checker)
- except:
- pass
- try:
- tmp['reason'] = unicode(item.get_inet_session_reject_reason())
- except:
- pass
- obj['items'].append(tmp.copy())
- obj['newtimestamp'] = newtimestamp
- response.write(json.dumps(obj))
- return response
- ################################################################################
- # Функционал для активных сессий
- ################################################################################
- @login_required
- def active_sessions_list(request):
- ctx = RequestContext(request)
- ctx['data'] = InetSessionActiveTest.objects.values(
- 'login', 'ip', 'mac', 'virtual_time_start', 'last_alive', 'id'
- ).order_by('-time_start')
- return render_to_response('inet/active_sessions_list.html', context_instance = ctx)
- @login_required
- def active_sessions_detail(request, id):
- ctx = RequestContext(request)
- try:
- ctx['data'] = InetSessionActiveTest.objects.get(pk=id)
- except:
- HttpResponse('')
- return render_to_response('inet/active_sessions_detail.html', context_instance = ctx)
- @login_required
- def active_sessions_delete(request, id):
- res = '0' if kill_sessions_by_id(id) == None else '1'
- return HttpResponse(res)
- ################################################################################
- # Функционал для профилей скорости
- ################################################################################
- from models import SpeedProfile
- from forms import SpeedProfileForm
- @login_required
- def speed_profile_create(request, id=''):
- ctx = RequestContext(request)
- ctx['form'] = SpeedProfileForm()
- ctx['mode'] = 'Создать'
- obj = None
- try:
- obj = SpeedProfile.objects.get(id=int(id))
- ctx['form'] = SpeedProfileForm(instance=obj)
- ctx['mode'] = 'Редактировать'
- ctx['id'] = id
- except:
- ctx['form'] = SpeedProfileForm()
- if request.method == 'POST':
- ctx['form'] = SpeedProfileForm(request.POST, instance=obj)
- if ctx['form'].is_valid():
- try:
- ctx['form'].save()
- return HttpResponseRedirect( reverse('_speed_profile_list') )
- except:
- #import traceback
- #exc = traceback.format_exc()
- #return HttpResponse( str(exc) )
- ctx['errors'] = 'Невозможно создать профиль скорости. Ошибка модели.'
- else:
- ctx['errors'] = 'Невозможно создать профиль скорости. Ошибка валидации. Корректно заполните поля.'
- return render_to_response('inet/speed_profile_create.html', context_instance = ctx)
- @login_required
- def speed_profile_list(request):
- ctx = RequestContext(request)
- search_process(ctx, SpeedProfile, request, 'name', 'inet.models.SpeedProfile')
- pagination_process(ctx, request)
- return render_to_response('inet/speed_profile_list.html', context_instance = ctx)
- def get_manual_netflow_report(request):
- date_start = request.GET.get('date_start')
- date_end = request.GET.get('date_end')
- ips = request.GET.get('ips')
- if ips is None or date_start is None or date_end is None:
- return HttpResponse('Чето Вы накосячили в параметрах гета.')
- filename = hashlib.md5(date_start+date_end+ips).hexdigest() + '.csv'
- if os.path.exists('/home/loki/loki/spool/report_daemon/reports/' + filename):
- response = HttpResponse(open('/home/loki/loki/spool/report_daemon/reports/' + filename, 'r'), mimetype='application/vnd.ms-excel')
- response['Content-Disposition'] = 'attachment; filename=%s' % filename
- response['Cache-Control'] = 'no-cache'
- return response
- nfrp = NetflowReport(tmp_path = '/home/loki/loki/spool/report_daemon/tmp',
- dst_path = '/home/loki/loki/spool/report_daemon/reports')
- nfrp.prepare()
- nfrp.generate_query(date_start,
- date_end,
- ips.split(','),
- True)
- nfrp.execute_query()
- nfrp.dst_filename = filename
- nfrp.date_time_ip_filter(date_start,
- date_end)
- nfrp.clear()
- response = HttpResponse(open(nfrp.dst_path + '/'+ nfrp.dst_filename, 'r'), mimetype='application/vnd.ms-excel')
- response['Content-Disposition'] = 'attachment; filename=%s' % nfrp.dst_filename
- response['Cache-Control'] = 'no-cache'
- return response
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement