Implement indexing into Apache Druid #1

Closed
m wants to merge 263 commits from druid into master
1 changed files with 70 additions and 14 deletions
Showing only changes of commit a8d0a7d886 - Show all commits

View File

@ -1,11 +1,12 @@
import functools
from json import dumps
from json import JSONDecodeError, dumps, loads
from klein import Klein
from twisted.web.server import Request
import main
from modules import userinfo
from utils.logging.log import warn
def login_required(func):
@ -38,28 +39,83 @@ class API(object):
app = Klein()
@app.route("/test/", methods=["GET"])
@app.route("/", methods=["GET"])
@login_required
def hello(self, request):
return "Hello"
@app.route("/who/<query>/", methods=["GET"])
@app.route("/who/<query>/", methods=["POST"])
@login_required
def who(self, request, query):
result = userinfo.getWho(query)
try:
data = loads(request.content.read())
except JSONDecodeError:
return "Invalid JSON"
if "query" not in data:
return "No query provided"
result = userinfo.getWho(data["query"])
# Expand the generator
return dumps({k: [x for x in v] for k, v in result.items()})
@app.route("/chans/<query>/", methods=["GET"])
@app.route("/chans/", methods=["POST"])
@login_required
def chans(self, request, query):
query = query.split(",")
result = userinfo.getChans(query)
return dumps({k: [x for x in v] for k, v in result.items()})
def chans(self, request):
try:
data = loads(request.content.read())
except JSONDecodeError:
return "Invalid JSON"
if "net" not in data:
return "No net provided"
if "query" not in data:
return "No query provided"
if not data["query"]:
warn(f"No query provided: for chans {data}")
return dumps({})
result = userinfo.getChansSingle(data["net"], data["query"])
if not result:
return dumps({})
return dumps({"chans": [x for x in result]})
@app.route("/users/<query>/", methods=["GET"])
@app.route("/users/", methods=["POST"])
@login_required
def users(self, request, query):
query = [f"#{x}" for x in query.split(",")]
result = userinfo.getUsers(query)
return dumps({k: [x for x in v] for k, v in result.items()})
def users(self, request):
try:
data = loads(request.content.read())
except JSONDecodeError:
return "Invalid JSON"
if "net" not in data:
return "No net provided"
if "query" not in data:
return "No query provided"
if not data["query"]:
warn(f"No query provided for users: {data}")
return dumps({})
result = userinfo.getUsersSingle(data["net"], data["query"])
if not result:
return dumps({})
return dumps({"users": [x for x in result]})
@app.route("/online/", methods=["POST"])
@login_required
def online(self, request):
try:
data = loads(request.content.read())
except JSONDecodeError:
return "Invalid JSON"
if "net" not in data:
return "No net provided"
if "query" not in data:
return "No users provided"
if not data["query"]:
warn(f"No users provided: for online {data}")
return dumps({})
net = data["net"]
usermap = {}
for user in data["query"]:
channels = userinfo.getChansSingle(net, [user])
if channels:
usermap[user] = True
else:
usermap[user] = False
return dumps(usermap)