Example #1
0
class MutexLock(AbstractFileLock):
    """:class:`MutexLock` is a thread-based rw lock based on :class:`dogpile.core.ReadWriteMutex`."""
    def __init__(self, filename):
        self.mutex = ReadWriteMutex()

    def acquire_read_lock(self, wait):
        ret = self.mutex.acquire_read_lock(wait)
        return wait or ret

    def acquire_write_lock(self, wait):
        ret = self.mutex.acquire_write_lock(wait)
        return wait or ret

    def release_read_lock(self):
        return self.mutex.release_read_lock()

    def release_write_lock(self):
        return self.mutex.release_write_lock()
Example #2
0
class MutexLock(AbstractFileLock):
    """:class:`MutexLock` is a thread-based rw lock based on :class:`dogpile.core.ReadWriteMutex`."""
    def __init__(self, filename):
        self.mutex = ReadWriteMutex()

    def acquire_read_lock(self, wait):
        ret = self.mutex.acquire_read_lock(wait)
        return wait or ret

    def acquire_write_lock(self, wait):
        ret = self.mutex.acquire_write_lock(wait)
        return wait or ret

    def release_read_lock(self):
        return self.mutex.release_read_lock()

    def release_write_lock(self):
        return self.mutex.release_write_lock()
Example #3
0
 def __init__(self, filename):
     self.mutex = ReadWriteMutex()
Example #4
0
 def __init__(self, filename):
     self.mutex = ReadWriteMutex()
Example #5
0
 def __init__(self):
     """Thread safe buffer of monitoring points"""
     self._mutex = ReadWriteMutex()
     self._buffer = {}
Example #6
0
class MonitoringBuffer(object):
    def __init__(self):
        """Thread safe buffer of monitoring points"""
        self._mutex = ReadWriteMutex()
        self._buffer = {}

    def add_points(self, points, timetag=None):
        """Add a :class:`dict` of point(s) to the buffer. This is to support points
        without metadata (old-style monitoring points)"""
        try:
            timestamp = timetag or bat_now()
            self._mutex.acquire_write_lock()
            for k, v in points.items():
                self._buffer[k] = {
                    'value': v,
                    'name': k,
                    'timestamp': timestamp
                }
        finally:
            self._mutex.release_write_lock()

    def add_full_points(self, points):
        """ points is a list of dict, each is a monitor point """
        try:
            self._mutex.acquire_write_lock()
            for point in points:
                name = point['name']
                mon_point = {
                    'name': name,
                    'timestamp': point.get('timestamp', bat_now()),
                    'unit': point.get('unit', ''),
                    'status': point.get('status', 'OK'),
                    'value': point['value']
                }
                self._buffer[name] = mon_point
        finally:
            self._mutex.release_write_lock()

    def add(self, name, value, timestamp=None, status="OK", unit=""):
        """Add a monitor point with metadata"""
        try:
            timestamp = timestamp or bat_now()
            point = {
                'name': name,
                'timestamp': timestamp,
                'unit': unit,
                'status': status,
                'value': value
            }
            self._mutex.acquire_write_lock()
            self._buffer[name] = point
        finally:
            self._mutex.release_write_lock()

    def remove(self, keys):
        points = keys
        if isinstance(keys, basestring):
            points = (keys, )
        try:
            self._mutex.acquire_write_lock()
            for k in points:
                if k in self._buffer:
                    self._buffer.pop(k)
        finally:
            self._mutex.release_write_lock()

    def clear(self):
        """
        Clear the buffer
        """
        try:
            self._mutex.acquire_write_lock()
            self._buffer.clear()
        finally:
            self._mutex.release_write_lock()

    def get(self, keys):
        """Get given point names `keys` from buffer

        :param list keys: a list of point names.

        """
        if isinstance(keys, basestring):
            keys = (keys, )
        try:
            self._mutex.acquire_read_lock()
            return [self._buffer[k] for k in keys if k in self._buffer]
        finally:
            self._mutex.release_read_lock()