Server Stats: remove sqlite3 dependency and enable stats for non-isolated servers

This commit is contained in:
Alberto Sottile 2018-07-26 23:53:16 +02:00
parent 6012a2b109
commit c99c6e57ac

View File

@ -1,10 +1,8 @@
import argparse import argparse
import codecs import codecs
import hashlib import hashlib
import os import os
import random import random
import sqlite3
import time import time
from string import Template from string import Template
@ -42,11 +40,12 @@ class SyncFactory(Factory):
self._roomManager = RoomManager() self._roomManager = RoomManager()
else: else:
self._roomManager = PublicRoomManager() self._roomManager = PublicRoomManager()
if statsDbFile is not None: if statsDbFile is not None:
statsDelay = 5*(int(self.port)%10 + 1) statsDelay = 5*(int(self.port)%10 + 1)
StatsRecorder(statsDbFile, self._roomManager, statsDelay) self._statsDbHandle = StatsRecorder()
else: self._statsDbHandle.startRecorder(statsDbFile, self._roomManager, statsDelay)
self.statsDbHandle = None else:
self._statsDbHandle = None
def buildProtocol(self, addr): def buildProtocol(self, addr):
return SyncServerProtocol(self) return SyncServerProtocol(self)
@ -194,7 +193,14 @@ class SyncFactory(Factory):
watcher.setPlaylistIndex(room.getName(), room.getPlaylistIndex()) watcher.setPlaylistIndex(room.getName(), room.getPlaylistIndex())
class StatsRecorder(object): class StatsRecorder(object):
def __init__(self, dbpath, roomManager, delay): def __init__(self):
self._dbPool = None
def __del__(self):
if self._dbPool is not None:
self._dbPool.close()
def startRecorder(self, dbpath, roomManager, delay):
self._dbPath = dbpath self._dbPath = dbpath
self._roomManagerHandle = roomManager self._roomManagerHandle = roomManager
try: try:
@ -203,11 +209,7 @@ class StatsRecorder(object):
except: except:
self._dbPool = None self._dbPool = None
print("--- Error in initializing the stats database. Server Stats not enabled. ---") print("--- Error in initializing the stats database. Server Stats not enabled. ---")
def __del__(self):
if self._dbPool is not None:
self._dbPool.close()
def _initDatabase(self): def _initDatabase(self):
dbpool = adbapi.ConnectionPool("sqlite3", self._dbPath, check_same_thread=False) dbpool = adbapi.ConnectionPool("sqlite3", self._dbPath, check_same_thread=False)
query = 'create table if not exists clients_snapshots (snapshot_time integer, version string)' query = 'create table if not exists clients_snapshots (snapshot_time integer, version string)'