(Умный) Планировщик заданий

Fortop

Новичок
что такое "смотрим есть задача"? вариант 1 не подразумевает никаких задач в базе.
Как не подразумевает?

Вот же она
zerkms
дёргается приложение, которое находит пользователя, который был неактивен более месяца.
 

zerkms

TDD infected
Команда форума
Fortop
т.е. ты "за" вариант 2?
господа, прошу вас, если вы не согласны с моими вариантами - уточняйте свои реализации. если согласны - то ссылайтесь сразу "решение 1" или "решение 2".

нарезать понты - лучше не здесь, правда.

-~{}~ 05.04.10 01:53:

Fortop
как это коррелирует с "задачей"?
вариант 1 подразумевает: лог УЖЕ ВЫПОЛНИВШИХСЯ ЗАДАНИЙ
в этом логе - факты выполнения заданий, на которые мы ориентируемся.
в варианте 1 нет запланированных задач, запланированные задачи есть в варианте 2.
 

Fortop

Новичок
но при этом ты же сам и возмущался:
Он возмущался засорением задач теми событиями которые не будут выполнятся.

Если задача попала в список - она выполнится 100%. В противном случае ей не место в списке, а там должно находиться что-то другое.
 

zerkms

TDD infected
Команда форума
если делается crm, то в любом случае придётся вводить логирование
и пусть логгирование с обсуждаемым процессом не имеет ничего общего, т.к. проводиться оно должно на другом уровне детализации.

а сложные запросы - хм, но это же не хайлод, где выборки только по ключу делать можно
да какая разница :) HL или не HL, я лучше напишу простой запрос, чем сложный :)

-~{}~ 05.04.10 01:56:

Он возмущался засорением задач теми событиями которые не будут выполнятся.

Если задача попала в список - она выполнится 100%. В противном случае ей не место в списке, а там должно находиться что-то другое.
мде. наверное я не умею объяснять.

начинаем заново всё:

есть issue tracker. нужно: в случае, если ticket висит на исполнителе больше недели:
- отправить исполнителю уведомление
- отправить начальнику исполнителя уведомление
подобные действия выполнять раз в неделю

аналогично:
если ticket висит на начальнике больше суток - напомнить ему, что нужно тикет кому-то назначить. повторять раз в сутки.

у меня НЕТ НИКАКИХ ПРЕДЛОЖЕНИЙ.
в базе есть только таблицы:

ticket:
id | text | state | user_id | added

user:
id | login

предлагайте решения этой задачи :)
 

Fortop

Новичок
zerkms
Я очень смутно понимаю варианты, но 2й мне не нравится.

правильнее 1й вариант, только задача это не "отправка письма пользователю если его долго не было" - а запуск аудитора который проверяет "как давно был пользователь"


zerkms
факты выполнения заданий, на которые мы ориентируемся.
Не, мы ориентируемся на состояния объектов.
Задание может изменить состояние, но его же могут изменить и другие действия (например, вход пользователя.в систему).
 

zerkms

TDD infected
Команда форума
Я очень смутно понимаю варианты
потому я и предложил выше reset.
никаких вариантов нет. есть задача, и я с удовольствием выслушаю предложения :)
 

Fortop

Новичок
я уже предложил :)
2 таска
1. раз в один/два/три часа для начальника
2. раз в сутки для исполнителя.

оба проверяют состояние тикетов и если надо шлют уведомление.

-~{}~ 04.04.10 18:06:

соответственно каждый может иметь дополнительную логику.
Например не слать уведомление по одному и тому же вопросу чаще чем раз в сутки.
Для этого можно иметь отдельный storage (индивидуальный для каждого таска) который расширяет возможные состояния рабочих объектов (в данном случае тикетов).
 

zerkms

TDD infected
Команда форума
Fortop
это решение не удовлетворяет поставленной задаче, потому как при шедуле в раз в сутки ты не сможешь отправить сообщение "через сутки". пессимистичный вариант: "через сутки, 23 часа 59минут и 59 секунд"
если таск запускается ежедневно в 3 ночи, а таск истекает в 3.01 - тогда уведомление придёт с опозданием в почти сутки, что как бы fail.

-~{}~ 05.04.10 02:12:

далее.
где в твоём варианте хранится какая-либо статусная информация?
вот у нас
2. раз в сутки для исполнителя.
а как узнать, когда была последняя отправка - ведь нужно отправить "через неделю после последнего уведомления" (что == раз в неделю)
 

Fortop

Новичок
zerkms
потому как при шедуле в раз в сутки ты не сможешь отправить сообщение "через сутки". пессимистичный вариант: "через сутки, 23 часа 59минут и 59 секунд"
Если это настолько критично, можно увеличить частоту запуска с1 раза в сутки, то 2-3-4.

zerkms
а как узнать,
там было небольшое дополнение :)

-~{}~ 04.04.10 18:17:

zerkms
ведь нужно отправить "через неделю после последнего уведомления"
Для особо сложных случаев это будет 3й/4й и т.д. таск (аудитор)

Который будет работать с теми самыми
Fortop
отдельный storage (индивидуальный для каждого таска)
 

zerkms

TDD infected
Команда форума
Fortop
недостаточно подробно :)

т.е. теперь у нас появляется дополнительная таблица (??) со структурой:
entity_id | entity_type | event_type | last_invoked_time
?

-~{}~ 05.04.10 02:20:

Для особо сложных случаев это будет 3й/4й и т.д. таск (аудитор)

Который будет работать с теми самыми
мде. и получается решение алгоритмически сложнее второго в разы и при этом во столько же менее точное - в сравнении с моим "вариантом №2" из ТС-поста.
 

Fortop

Новичок
zerkms
т.е. теперь у нас появляется дополнительная таблица (??) со структурой:
entity_id | entity_type | event_type | last_invoked_time
это может быть вообще файл, а не таблица.
Необязательно стараться все нормализовать до предела.

Т.е. это может быть серия разных файлов.
 

zerkms

TDD infected
Команда форума
это может быть вообще файл, а не таблица.
Необязательно стараться все нормализовать до предела.
по файлу искать значительно сложнее, чем по таблице.
 

Fortop

Новичок
zerkms
я не думаю, что потребуются аудиторы аудиторов :) (но в crm/erp такая вероятность есть)
И все обойдется просто хранением расширенного состояния.
 

zerkms

TDD infected
Команда форума
Fortop
я тебя не понимаю - ты говоришь слишком абстрактными вещами, несмотря на то, что я предложил уже довольно конкретную задачу, с конкретной схемой и ожидал конкретного алгоритма с конкретными дополнительными таблицами/модификацией текущих.
 

Fortop

Новичок
zerkms
по файлу искать значительно сложнее, чем по таблице.
это если закладываться на меганагрузку с десятками тысяч пользователей и миллионами тикетов.

В большинстве случаев будет ну 100, ну 500 записей на такой файлик.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Псевдокот, ага:

event:
id | created_at | period | callable_object | callable_object_method | callable_method_params

по достижению created_at + period дергаем callable_method у callable_object c параметрами callable_method_params где он что-то делает, и в итоге сообщает, нужно ли ему повторно дернуть себя через period либо очистить задание.

типа
PHP:
class Ticket {
function __construct (EventDispatcher $ed) {
 $ed::registerEvent('Ticket','notifyBoss', $ticket_id, '2 day');
 $ed::registerEvent('Ticket','notifyUser', $ticket_id, '1 day');
}
function notifyBoss($ticket_id) {
  if (ticket_open($ticket_id)) {
  mail ('[email protected]', 'ticket '.$ticket_id.' expired!');
  return true;
} else {
  return false;
}
}
}
$ticket = new Ticket();
 

zerkms

TDD infected
Команда форума
это если закладываться на меганагрузку с десятками тысяч пользователей и миллионами тикетов.

В большинстве случаев будет ну 100, ну 500 записей на такой файлик.
как способ хранения служебной инфы влияет на способ решения поставленной исходной задачи?

пхпклуб такой пхпклуб

-~{}~ 05.04.10 02:26:

флоппик
т.е. ты повторил моё "решение №2" из стартового поста?
 

Fortop

Новичок
zerkms
В задаче ничего не было про то, что раз в сутки - должно быть строго через 24 часа.
Т.е. я предположил разумное отклонение 1 сутки при сроках реакции 1 неделя. Надо точнее - уточняй точность.
Это регулируется частотой выполнения аудитора.

Дополнительное состояние можно хранить не отдельно, а добавить в таблицу с тикетом - manager_noticed, chief_noticed (но это негибко), поэтому лучше локальные хранилища для каждого аудитора.

-~{}~ 04.04.10 18:32:

zerkms
как способ хранения служебной инфы влияет на способ решения поставленной исходной задачи?
А собственные комментарии читать сложно?

Я даже цитату привел, к чему это относится.

zerkms
по файлу искать значительно сложнее, чем по таблице.
 

Fortop

Новичок
флоппик
т.е. ты повторил моё "решение №2" из стартового поста?
Если посмотреть внимательно, то в решении №2 речь идет о событиях - отправить извещение "мы о тебе соскучились". У флоппика речь идет об обработчиках этих событий.
 
Сверху