Navigation Menu

Skip to content
This repository has been archived by the owner on Dec 18, 2019. It is now read-only.

Commit

Permalink
add some structure to the project
Browse files Browse the repository at this point in the history
  • Loading branch information
Sabin Iacob committed Feb 4, 2011
1 parent 0f7531b commit db0d113
Show file tree
Hide file tree
Showing 8 changed files with 83 additions and 0 deletions.
File renamed without changes.
File renamed without changes.
83 changes: 83 additions & 0 deletions gstats/__init__.py
@@ -0,0 +1,83 @@
# Copyright (c) 2010 Sabin Iacob <iacobs@gmail.com>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.

import zmq
from datetime import datetime

requests = {}

def context_factory():
context_store = []
def inner():
if not context_store:
context_store.append(zmq.Context())
return context_store[0]

return inner

get_context = context_factory()

def start_request(req, collect=False, collector='tcp://127.0.0.2:2345', prefix='my_app'):
"""
register a request
registers a request in the internal request table, optionally also sends it to the collector
:param req: request, can be mostly any hash-able object
:param collect: whether to send the request started event to the collector (bool)
:param collector: collector address, in zeromq format (string, default tcp://127.0.0.2:2345)
:param prefix: label under which to register the request (string, default my_app)
"""

if collect:
_collector = get_context().socket(zmq.REQ)
_collector.connect(collector)

_collector.send_multipart([prefix, ''])
_collector.recv()

requests[hash(req)] = datetime.now()

def end_request(req, collector='tcp://127.0.0.2:2345', prefix='my_app'):
"""
registers the end of a request
registers the end of a request, computes elapsed time, sends it to the collector
:param req: request, can be mostly any hash-able object
:param collector: collector address, in zeromq format (string, default tcp://127.0.0.2:2345)
:param prefix: label under which to register the request (string, default my_app)
"""

req_end = datetime.now()
req = hash(req)

if req in requests:
req_time = req_end - requests[req]
req_time = req_time.seconds * 1000 + req_time.microseconds / 1000

del requests[req]

_collector = get_context().socket(zmq.REQ)
_collector.connect(collector)

_collector.send_multipart([prefix, str(req_time)])
_collector.recv()

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 comments on commit db0d113

Please sign in to comment.