2022-07-21 12:51:12 +00:00
|
|
|
import logging
|
|
|
|
|
|
|
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
|
|
|
from django.http import HttpResponse, JsonResponse
|
|
|
|
from rest_framework.parsers import FormParser
|
|
|
|
from rest_framework.views import APIView
|
|
|
|
|
2022-07-21 12:51:55 +00:00
|
|
|
from core.lib.threshold import annotate_online, get_chans, get_users
|
2022-07-21 12:51:12 +00:00
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
class ThresholdChans(LoginRequiredMixin, APIView):
|
|
|
|
parser_classes = [FormParser]
|
|
|
|
plan_name = "drilldown"
|
|
|
|
|
|
|
|
def post(self, request):
|
|
|
|
if not request.user.has_plan(self.plan_name):
|
|
|
|
return JsonResponse({"success": False})
|
|
|
|
if "net" not in request.data:
|
|
|
|
return JsonResponse({"success": False})
|
|
|
|
if "query" not in request.data:
|
|
|
|
return JsonResponse({"success": False})
|
|
|
|
net = request.data["net"]
|
|
|
|
query = request.data["query"]
|
|
|
|
channels = get_chans(net, [query])
|
|
|
|
if not channels:
|
|
|
|
return HttpResponse("")
|
|
|
|
channels_human = ", ".join(channels)
|
|
|
|
return HttpResponse(channels_human)
|
|
|
|
|
|
|
|
|
|
|
|
class ThresholdUsers(LoginRequiredMixin, APIView):
|
|
|
|
parser_classes = [FormParser]
|
|
|
|
plan_name = "drilldown"
|
|
|
|
|
|
|
|
def post(self, request):
|
|
|
|
if not request.user.has_plan(self.plan_name):
|
|
|
|
return JsonResponse({"success": False})
|
|
|
|
if "net" not in request.data:
|
|
|
|
return JsonResponse({"success": False})
|
|
|
|
if "query" not in request.data:
|
|
|
|
return JsonResponse({"success": False})
|
|
|
|
net = request.data["net"]
|
|
|
|
query = request.data["query"]
|
|
|
|
users = get_users(net, [query])
|
|
|
|
if not users:
|
|
|
|
return HttpResponse("")
|
|
|
|
users_human = ", ".join(users)
|
|
|
|
return HttpResponse(users_human)
|
|
|
|
|
|
|
|
|
|
|
|
class ThresholdOnline(LoginRequiredMixin, APIView):
|
|
|
|
parser_classes = [FormParser]
|
|
|
|
plan_name = "drilldown"
|
|
|
|
|
|
|
|
def post(self, request):
|
|
|
|
if not request.user.has_plan(self.plan_name):
|
|
|
|
return JsonResponse({"success": False})
|
|
|
|
if "net" not in request.data:
|
|
|
|
return JsonResponse({"success": False})
|
|
|
|
if "query" not in request.data:
|
|
|
|
return JsonResponse({"success": False})
|
|
|
|
net = request.data["net"]
|
|
|
|
query = request.data["query"]
|
|
|
|
online_info = annotate_online(net, query)
|
|
|
|
return JsonResponse(online_info)
|