mirror of
https://github.com/dkmstr/openuds.git
synced 2025-01-03 01:17:56 +03:00
* Adding stats, charts, ...
* Refactoring some packages also
This commit is contained in:
parent
83278c7c6b
commit
516bd7eeb0
38
server/src/uds/core/util/charts.py
Normal file
38
server/src/uds/core/util/charts.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# Copyright (c) 2013 Virtual Cable S.L.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
# are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer in the documentation
|
||||||
|
# and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software
|
||||||
|
# without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
'''
|
||||||
|
@author: Adolfo Gómez, dkmaster at dkmon dot com
|
||||||
|
'''
|
||||||
|
|
||||||
|
# Chart types
|
||||||
|
CHART_TYPE_LINE, CHART_TYPE_AREA, CHART_TYPE_BAR = xrange(2)
|
||||||
|
|
||||||
|
def makeChart(fromWhatStat, **kwargs):
|
||||||
|
|
||||||
|
pass
|
@ -1,73 +0,0 @@
|
|||||||
'''
|
|
||||||
From django locking manager snippet at http://djangosnippets.org/snippets/833/
|
|
||||||
Author:
|
|
||||||
miohtama
|
|
||||||
'''
|
|
||||||
|
|
||||||
from django.db import models, connection
|
|
||||||
import logging
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
# Table locking in mysql at least is based on thread requesting it, so we should not have problems with a bit of care
|
|
||||||
class LockingManager(models.Manager):
|
|
||||||
""" Add lock/unlock functionality to manager.
|
|
||||||
|
|
||||||
Example::
|
|
||||||
|
|
||||||
class Job(models.Model):
|
|
||||||
|
|
||||||
manager = LockingManager()
|
|
||||||
|
|
||||||
counter = models.IntegerField(null=True, default=0)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def do_atomic_update(job_id)
|
|
||||||
''' Updates job integer, keeping it below 5 '''
|
|
||||||
try:
|
|
||||||
# Ensure only one HTTP request can do this update at once.
|
|
||||||
Job.objects.lock()
|
|
||||||
|
|
||||||
job = Job.object.get(id=job_id)
|
|
||||||
# If we don't lock the tables two simultanous
|
|
||||||
# requests might both increase the counter
|
|
||||||
# going over 5
|
|
||||||
if job.counter < 5:
|
|
||||||
job.counter += 1
|
|
||||||
job.save()
|
|
||||||
|
|
||||||
finally:
|
|
||||||
Job.objects.unlock()
|
|
||||||
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
def lock(self):
|
|
||||||
""" Lock table.
|
|
||||||
|
|
||||||
Locks the object model table so that atomic update is possible.
|
|
||||||
Simulatenous database access request pend until the lock is unlock()'ed.
|
|
||||||
|
|
||||||
Note: If you need to lock multiple tables, you need to do lock them
|
|
||||||
all in one SQL clause and this function is not enough. To avoid
|
|
||||||
dead lock, all tables must be locked in the same order.
|
|
||||||
|
|
||||||
See http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html
|
|
||||||
"""
|
|
||||||
con = connection
|
|
||||||
cursor = con.cursor()
|
|
||||||
table = self.model._meta.db_table
|
|
||||||
#logger.debug("Locking table %s" % table)
|
|
||||||
cursor.execute("LOCK TABLES %s WRITE" % table)
|
|
||||||
row = cursor.fetchone()
|
|
||||||
return row
|
|
||||||
|
|
||||||
def unlock(self):
|
|
||||||
""" Unlock the table. """
|
|
||||||
#logger.debug("Unlocked tables")
|
|
||||||
con = connection
|
|
||||||
cursor = con.cursor()
|
|
||||||
#table = self.model._meta.db_table
|
|
||||||
cursor.execute("UNLOCK TABLES")
|
|
||||||
row = cursor.fetchone()
|
|
||||||
return row
|
|
32
server/src/uds/core/util/stats/__init__.py
Normal file
32
server/src/uds/core/util/stats/__init__.py
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# Copyright (c) 2013 Virtual Cable S.L.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
# are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer in the documentation
|
||||||
|
# and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software
|
||||||
|
# without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
'''
|
||||||
|
@author: Adolfo Gómez, dkmaster at dkmon dot com
|
||||||
|
'''
|
||||||
|
import counters
|
55
server/src/uds/core/util/stats/counters.py
Normal file
55
server/src/uds/core/util/stats/counters.py
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# Copyright (c) 2013 Virtual Cable S.L.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
# are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer in the documentation
|
||||||
|
# and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software
|
||||||
|
# without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
'''
|
||||||
|
@author: Adolfo Gómez, dkmaster at dkmon dot com
|
||||||
|
'''
|
||||||
|
from uds.core.managers import statsManager
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
# Posible counters, note that not all are used by every posible type
|
||||||
|
# FIRST_COUNTER_TYPE, LAST_COUNTER_TYPE are just a placeholder for sanity checks
|
||||||
|
(
|
||||||
|
FIRST_COUNTER_TYPE,
|
||||||
|
CT_LOAD, CT_STORAGE, CT_ASSIGNED,CT_CACHE1, CT_CACHE2, CT_INUSE, CT_ERROR,
|
||||||
|
LAST_COUNTER_TYPE
|
||||||
|
) = xrange(9)
|
||||||
|
|
||||||
|
|
||||||
|
def addCounter(toObject, counterType, counterValue, stamp = None):
|
||||||
|
if counterType <= FIRST_COUNTER_TYPE or counterType >= LAST_COUNTER_TYPE:
|
||||||
|
logger.error('Counter type is not valid')
|
||||||
|
return False
|
||||||
|
|
||||||
|
return statsManager().addCounter(toObject, counterType, counterValue, stamp)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user