Migrate SQLLite to MySQL

This commit is contained in:
AnthorNet 2018-10-23 09:58:21 +02:00
parent 3c01bdc402
commit 5b74875630
5 changed files with 63 additions and 56 deletions

1
.gitignore vendored

@ -57,3 +57,4 @@ target/
/examples/CSharp/ConsoleApp/ConsoleApp/bin
/examples/CSharp/ConsoleApp/.vs/
/examples/CSharp/ConsoleApp/ConsoleApp/obj
/nbproject/private/

@ -20,16 +20,16 @@ setup(
name='eddn',
version=verstr,
description='Elite: Dangerous Data Network',
author='James Muscat',
author_email='muscaat@elite-markets.net',
url='https://github.com/jamesremuscat/eddn',
author='Anthor (EDSM)',
author_email='contact@edsm.net',
url='https://github.com/EDSM-NET/EDDN',
packages=find_packages('src', exclude=["*.tests"]),
package_dir = {'':'src'},
data_files=[('eddn/schemas', glob.glob("schemas/*.json"))],
long_description="""\
The Elite: Dangerous Data Network allows E:D players to share data. Not affiliated with Frontier Developments.
""",
install_requires=["argparse", "bottle", "enum34", "gevent", "jsonschema", "pyzmq", "simplejson"],
install_requires=["argparse", "bottle", "enum34", "gevent", "jsonschema", "pyzmq", "simplejson", "mysql-connector-python"],
entry_points={
'console_scripts': [
'eddn-gateway = eddn.Gateway:main',

@ -7,7 +7,7 @@ from threading import Thread
import zlib
import gevent
import simplejson
import sqlite3
import mysql.connector as mariadb
import datetime
import collections
import zmq.green as zmq
@ -40,7 +40,7 @@ def ping():
@get('/getTotalSoftwares/')
def getTotalSoftwares():
response.set_header("Access-Control-Allow-Origin", "*")
db = sqlite3.connect(Settings.MONITOR_DB)
db = mariadb.connect(user=Settings.MONITOR_DB['user'], password=Settings.MONITOR_DB['password'], database=Settings.MONITOR_DB['database'])
softwares = collections.OrderedDict()
maxDays = request.GET.get('maxDays', '31').strip()
@ -64,16 +64,16 @@ def getTotalSoftwares():
@get('/getSoftwares/')
def getSoftwares():
response.set_header("Access-Control-Allow-Origin", "*")
db = sqlite3.connect(Settings.MONITOR_DB)
db = mariadb.connect(user=Settings.MONITOR_DB['user'], password=Settings.MONITOR_DB['password'], database=Settings.MONITOR_DB['database'])
softwares = collections.OrderedDict()
dateStart = request.GET.get('dateStart', str(date('%Y-%m-%d'))).strip()
dateEnd = request.GET.get('dateEnd', str(date('%Y-%m-%d'))).strip()
query = """SELECT *
FROM softwares
WHERE dateStats BETWEEN ? AND ?
ORDER BY hits DESC, dateStats ASC"""
FROM `softwares`
WHERE `dateStats` BETWEEN %s AND %s
ORDER BY `hits` DESC, `dateStats` ASC"""
results = db.execute(query, (dateStart, dateEnd))
for row in results:
@ -90,17 +90,17 @@ def getSoftwares():
@get('/getTotalUploaders/')
def getTotalUploaders():
response.set_header("Access-Control-Allow-Origin", "*")
db = sqlite3.connect(Settings.MONITOR_DB)
db = mariadb.connect(user=Settings.MONITOR_DB['user'], password=Settings.MONITOR_DB['password'], database=Settings.MONITOR_DB['database'])
uploaders = collections.OrderedDict()
limit = request.GET.get('limit', '20').strip()
query = """SELECT name, SUM(hits) AS total
FROM uploaders
GROUP BY name
ORDER BY total DESC
LIMIT """ + limit
results = db.execute(query)
query = """SELECT `name`, SUM(`hits`) AS `total`
FROM `uploaders`
GROUP BY `name`
ORDER BY `total` DESC
LIMIT %s"""
results = db.execute(query, (limit, ))
for row in results:
uploaders[row[0].encode('utf8')] = row[1]
@ -113,16 +113,16 @@ def getTotalUploaders():
@get('/getUploaders/')
def getUploaders():
response.set_header("Access-Control-Allow-Origin", "*")
db = sqlite3.connect(Settings.MONITOR_DB)
db = mariadb.connect(user=Settings.MONITOR_DB['user'], password=Settings.MONITOR_DB['password'], database=Settings.MONITOR_DB['database'])
uploaders = collections.OrderedDict()
dateStart = request.GET.get('dateStart', str(date('%Y-%m-%d'))).strip()
dateEnd = request.GET.get('dateEnd', str(date('%Y-%m-%d'))).strip()
query = """SELECT *
FROM uploaders
WHERE dateStats BETWEEN ? AND ?
ORDER BY hits DESC, dateStats ASC"""
FROM `uploaders`
WHERE `dateStats` BETWEEN %s AND %s
ORDER BY `hits` DESC, `dateStats` ASC"""
results = db.execute(query, (dateStart, dateEnd))
for row in results:
@ -139,13 +139,13 @@ def getUploaders():
@get('/getTotalSchemas/')
def getTotalSchemas():
response.set_header("Access-Control-Allow-Origin", "*")
db = sqlite3.connect(Settings.MONITOR_DB)
db = mariadb.connect(user=Settings.MONITOR_DB['user'], password=Settings.MONITOR_DB['password'], database=Settings.MONITOR_DB['database'])
schemas = collections.OrderedDict()
query = """SELECT name, SUM(hits) AS total
FROM schemas
GROUP BY name
ORDER BY total DESC"""
query = """SELECT `name`, SUM(`hits`) AS `total`
FROM `schemas`
GROUP BY `name`
ORDER BY `total` DESC"""
results = db.execute(query)
for row in results:
@ -159,17 +159,17 @@ def getTotalSchemas():
@get('/getSchemas/')
def getSchemas():
response.set_header("Access-Control-Allow-Origin", "*")
db = sqlite3.connect(Settings.MONITOR_DB)
db.text_factory = lambda x: unicode(x, "utf-8", "ignore")
db = mariadb.connect(user=Settings.MONITOR_DB['user'], password=Settings.MONITOR_DB['password'], database=Settings.MONITOR_DB['database'])
#db.text_factory = lambda x: unicode(x, "utf-8", "ignore")
schemas = collections.OrderedDict()
dateStart = request.GET.get('dateStart', str(date('%Y-%m-%d'))).strip()
dateEnd = request.GET.get('dateEnd', str(date('%Y-%m-%d'))).strip()
query = """SELECT *
FROM schemas
WHERE dateStats BETWEEN ? AND ?
ORDER BY hits DESC, dateStats ASC"""
FROM `schemas`
WHERE `dateStats` BETWEEN %s AND %s
ORDER BY `hits` DESC, `dateStats` ASC"""
results = db.execute(query, (dateStart, dateEnd))
for row in results:
@ -190,14 +190,14 @@ class Monitor(Thread):
receiver = context.socket(zmq.SUB)
receiver.setsockopt(zmq.SUBSCRIBE, '')
analytics = Analytics()
for binding in Settings.MONITOR_RECEIVER_BINDINGS:
receiver.connect(binding)
def monitor_worker(message):
db = sqlite3.connect(Settings.MONITOR_DB)
db = mariadb.connect(user=Settings.MONITOR_DB['user'], password=Settings.MONITOR_DB['password'], database=Settings.MONITOR_DB['database'])
# Separate topic from message
message = message.split(' |-| ')
@ -210,52 +210,52 @@ class Monitor(Thread):
message = zlib.decompress(message)
json = simplejson.loads(message)
# Default variables
schemaID = json['$schemaRef']
softwareID = json['header']['softwareName'].encode('utf8') + ' | ' + json['header']['softwareVersion'].encode('utf8')
uploaderID = json['header']['uploaderID'].encode('utf8')
uploaderIP = None
if 'uploaderIP' in json['header']:
uploaderIP = json['header']['uploaderIP'].encode('utf8')
# Duplicates?
if Settings.RELAY_DUPLICATE_MAX_MINUTES:
if duplicateMessages.isDuplicated(json):
schemaID = 'DUPLICATE MESSAGE'
c = db.cursor()
c.execute('UPDATE schemas SET hits = hits + 1 WHERE `name` = ? AND `dateStats` = DATE("now", "utc")', (schemaID, ))
c.execute('INSERT OR IGNORE INTO schemas (name, dateStats) VALUES (?, DATE("now", "utc"))', (schemaID, ))
c.execute('UPDATE `schemas` SET `hits` = `hits` + 1 WHERE `name` = %s AND `dateStats` = UTC_DATE()', (schemaID, ))
c.execute('INSERT IGNORE INTO `schemas` (`name`, `dateStats`) VALUES (%s, UTC_DATE())', (schemaID, ))
db.commit()
db.close()
analytics.hit('DUPLICATE', uploaderID, uploaderIP)
return
# Update software count
c = db.cursor()
c.execute('UPDATE softwares SET hits = hits + 1 WHERE `name` = ? AND `dateStats` = DATE("now", "utc")', (softwareID, ))
c.execute('INSERT OR IGNORE INTO softwares (name, dateStats) VALUES (?, DATE("now", "utc"))', (softwareID, ))
c.execute('UPDATE `softwares` SET `hits` = `hits` + 1 WHERE `name` = %s AND `dateStats` = UTC_DATE()', (softwareID, ))
c.execute('INSERT IGNORE INTO `softwares` (`name`, `dateStats`) VALUES (%s, UTC_DATE())', (softwareID, ))
db.commit()
# Update uploader count
if uploaderID: # Don't get empty uploaderID
c = db.cursor()
c.execute('UPDATE uploaders SET hits = hits + 1 WHERE `name` = ? AND `dateStats` = DATE("now", "utc")', (uploaderID, ))
c.execute('INSERT OR IGNORE INTO uploaders (name, dateStats) VALUES (?, DATE("now", "utc"))', (uploaderID, ))
c.execute('UPDATE `uploaders` SET `hits` = `hits` + 1 WHERE `name` = %s AND `dateStats` = UTC_DATE()', (uploaderID, ))
c.execute('INSERT IGNORE INTO `uploaders` (`name`, `dateStats`) VALUES (%s, UTC_DATE())', (uploaderID, ))
db.commit()
# Update schemas count
c = db.cursor()
c.execute('UPDATE schemas SET hits = hits + 1 WHERE `name` = ? AND `dateStats` = DATE("now", "utc")', (schemaID, ))
c.execute('INSERT OR IGNORE INTO schemas (name, dateStats) VALUES (?, DATE("now", "utc"))', (schemaID, ))
c.execute('UPDATE `schemas` SET `hits` = `hits` + 1 WHERE `name` = %s AND `dateStats` = UTC_DATE()', (schemaID, ))
c.execute('INSERT IGNORE INTO `schemas` (`name`, `dateStats`) VALUES (%s, UTC_DATE())', (schemaID, ))
db.commit()
db.close()
if re.search('test', schemaID, re.I):
analytics.hit(Settings.GATEWAY_JSON_SCHEMAS[schemaID] + '#test', uploaderID, uploaderIP)
else:
@ -271,9 +271,9 @@ def main():
m = Monitor()
m.start()
bottle_run(
host='0.0.0.0',
port=9091,
server='gevent',
host=Settings.MONITOR_HTTP_BIND_ADDRESS,
port=Settings.MONITOR_HTTP_PORT,
server='gevent',
certfile=Settings.CERT_FILE,
keyfile=Settings.KEY_FILE
)

@ -86,10 +86,16 @@ class _Settings(object):
# Monitor settings
###############################################################################
MONITOR_HTTP_BIND_ADDRESS = "0.0.0.0"
MONITOR_HTTP_PORT = 9091
MONITOR_RECEIVER_BINDINGS = ["tcp://127.0.0.1:8500"]
MONITOR_DB = "/home/EDDN_Monitor.s3db"
#MONITOR_DB = "D:/EDDN_Monitor.s3db" #DEBUG
MONITOR_DB = {
"user": "eddn",
"password": "cvLYM8AEqg29YTatFMEcqph3YkDWUMvC",
"database": "eddn"
}
MONITOR_UA = "UA-496332-23"

@ -1,2 +1,2 @@
# This should be a version number as understood by setuptools
__version__ = "1.1"
__version__ = "1.2"