Skip to content

Commit

Permalink
Добавлен лимит на количество заданий в системе
Browse files Browse the repository at this point in the history
  • Loading branch information
shlomin committed Aug 7, 2013
1 parent 8cea5d4 commit 8e0299a
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 7 deletions.
3 changes: 3 additions & 0 deletions config.ini
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,6 @@ port = 3306
user = root
pass = 1
wait_timeout = 10
[system]
; Количество заданий которое способна обработать система
taskLimit = 10
7 changes: 5 additions & 2 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ def render_POST(self, request):
return server.NOT_DONE_YET

class Tasker(StationSelector):

u"""Позволяет добавить новое задание"""
_task = None

def __init__(self):
Expand All @@ -104,7 +104,10 @@ def render_POST(self, request):
self._output('expected some parameter: %s' % ex, request)
return server.NOT_DONE_YET
else:
self._task.add(src, dst, date, phone, type)
try:
self._task.add(src, dst, date, phone, type)
except Exception, ex:
answer = ex
self._output(answer, request)
return server.NOT_DONE_YET

Expand Down
55 changes: 50 additions & 5 deletions task.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,45 @@

from logger import Logger
from db import DB
from ConfigParser import ConfigParser
from urllib import urlencode
from datetime import datetime
from functools import partial

IN_PROGRESS = 0
COMPLERE = 1

config = ConfigParser()
config.read('./config.ini')

class Task(object):
_db = None
u"""
Класс управления заданиями
Позволяет добавлять и удалять задания из очереди
"""
_db = None
# Логи
_log = None
# Словарь имен вызванных логов для partial
_logNamesPart = {}

def __init__(self):
self._log = Logger()
self._db = DB()

def __getattr__(self, name):
try:
return self._logNamesPart[name]
except KeyError:
obj = getattr(self._log, name)
if obj is not None:
part = partial(obj, moduleName=self.__class__.__name__)
self._logNamesPart[name] = part
return part
else:
self._log.error('Попытка вызова несуществующего типа лога "%s"',
name, moduleName=self.__class__.__name__)

def _buildRequest(self, src, dst, date):
self._db.execute('''SELECT `Name` FROM `Stations` WHERE `Code`=%s''', int(src))
if self._db.getRowCount():
Expand Down Expand Up @@ -49,9 +79,24 @@ def _buildRequest(self, src, dst, date):
}
return urlencode(params)

def cnt(self):
u'''
Получение количества активных заданий в системе
@return int
'''
self._db.execute('''SELECT COUNT(*) FROM `Tasks` WHERE `Complete`=%s''',
IN_PROGRESS)
return int(self._db.getFetchOne()[0])

def add(self, src, dst, date, phone, type):
u'''Добавление нового задания в очередь'''
self._db.execute('''INSERT INTO `Tasks` SET `Phone`=%s, `Src`=%s,
`Dst`=%s, `Date`=%s, `Type`=%s, `DateTimeCreate`=NOW(), `DateTimeCheck`=null, `Complete`=0''',
phone, src, dst, date, type)
self._db.getConnDB().commit()
limit = config.getint('system', 'taskLimit')
if limit > self.cnt():
self._db.execute('''INSERT INTO `Tasks` SET `Phone`=%s, `Src`=%s,
`Dst`=%s, `Date`=%s, `Type`=%s, `DateTimeCreate`=NOW(), `DateTimeCheck`=null, `Complete`=0''',
phone, int(src), int(dst), date, type)
self._db.getConnDB().commit()
self.debug('Клиент %s добавил новую заявку', phone)
else:
self.error('Система не может принять %d-ю заявку', self.cnt())
raise Exception('Достигнут лимит количества активных заданий в системе')

0 comments on commit 8e0299a

Please sign in to comment.