diff --git a/server/src/uds/core/util/charts.py b/server/src/uds/core/util/charts.py new file mode 100644 index 000000000..d57536f73 --- /dev/null +++ b/server/src/uds/core/util/charts.py @@ -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 \ No newline at end of file diff --git a/server/src/uds/core/util/db/LockingManager.py b/server/src/uds/core/util/db/LockingManager.py deleted file mode 100644 index ea3bb3448..000000000 --- a/server/src/uds/core/util/db/LockingManager.py +++ /dev/null @@ -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 \ No newline at end of file diff --git a/server/src/uds/core/util/stats/__init__.py b/server/src/uds/core/util/stats/__init__.py new file mode 100644 index 000000000..bf673388d --- /dev/null +++ b/server/src/uds/core/util/stats/__init__.py @@ -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 \ No newline at end of file diff --git a/server/src/uds/core/util/stats/counters.py b/server/src/uds/core/util/stats/counters.py new file mode 100644 index 000000000..c2ccc2bff --- /dev/null +++ b/server/src/uds/core/util/stats/counters.py @@ -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) + + \ No newline at end of file