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

  • Автор темы Автор темы zerkms
  • Дата начала Дата начала
Но вот смысла регистрировать отдельно notifyBoss и notifyUser да ещё и для каждого тикета отдельно - не вижу.
Я. Специально. Написал. В. Нескольких. Местах. Что. Это. ПСЕВДОКОД.
 
флоппик
Так я не ради поругать. Это моё ИМХО (вроде везде пишу) относительно реализации. ИМХО и не более. Может пригодится ТС может нет. Пусть сам думает.
 
относительно реализации я бы сделал notifySubscribers()
который не обязательно будет вызван именно шедулером, а так же и изменениями тикета, например.
Целью моего псевдокода было показать разумное разделение отвественности между обьектами приложения, как то показать то, что планировать эти самые "извещения" должен сам обьект, о изменении состояния которого извещают (достижение определенного времени это тоже изменение состояния) Причем, как zerkms сначала сказал, что "никто не говорит, что это обязательно уведомления" - это могут быть любые изменения состояния. Да и сами уведомления могут быть реализованы различными способами.

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

А весь срач вокруг моего кода только потому, что я пока единственный, кто сумел выразить свои мысли в однозначной терминологии (сложно говорить о неоднозначности псевдокода, ага), тогда как остальные оперируют на уровне литературных изысков, т.к. уровень знания технической терминологии тут у всех разный.

Пхпклуб такой пхпклуб, ага. ;)
 
флоппик
Да ладно не гуди))) Идею я поддерживаю на 100% Нужна регистрация логики. Что там будет эта логика делать и как именно регистрироваться (набор параметров и прочее) - вопрос который нужно решать по месту.
З.Ы.
Про литературные изыски прикольно)))
 
возможно, как вариант одной из гибких реализаций - поможет это

http://www.1c-bitrix.ru/download/files/manuals/ru/bf_bizproc.doc
 
Mols
Да ладно не гуди))) Идею я поддерживаю на 100% Нужна регистрация логики
Нужно вводить новое состояние задачи "приостановлено". И опять возникают вопросы поиска этих назначенных заданий для всех пользователей которые относятся к объекту (сейча тикету) и т.д и т.п.
Либо нужно в сами эти назначенные задания добавлять логику определения нужно ли отсылать для объекта извещения (а это ж вроде как раз то, от чего хотели уйти).
Ну ИМХО не нужно это всё. В одном месте всё должно быть.
имхо - не получится так волшебно, чтобы и регистрация ивентов была, и в одном месте логика
 
что существует помимо тех таблиц - вас волновать не должно.
В который раз убеждаюсь, спрашивающие на форумах, имеют кучу гонора и святую веру в непогрешимость собственной точки зрения.
Зато не имеют понятия о чем спрашивают и любят задавать вопросы в форме - "как вырвать гланды через жопу, правильные варианты не предлагать".

Если человек с датой регистрации 2004й год ведет себя так, то что можно требовать от начинающих?

Печально все это господа.
 
Fortop
потому что остальные таблицы не имеют значения для решения данной задачи.
я дал минимально необходимый набор таблиц + развязал руки: нужны ещё таблицы - говорите какие.
лично я привык общаться со специалистами, которые что-то подразумевают явно, а не занимаются философией и гаданием а-ля "для таких задач обычно делают так".
неужели так сложно в рамках поставленной задачи явно общаться? оперируя известными таблицами и извещая обо всех "подразумеваниях"? или это такая специфика гур - в течение разговора надумать себе в голове структуру из 100 таблиц и считать, что все знают, что у тебя там творится?

я не хочу завязываться на ИМЕЮЩУЮСЯ структуру - для этого я и дал МИНИМУМ. чтобы не притягивать за уши решение к тому что есть, а из 2х реалий: того что есть и того что нужно сделать - получить симбиоз, который удовлетворит всех.

-~{}~ 05.04.10 23:31:

Если человек с датой регистрации 2004й год ведет себя так, то что можно требовать от начинающих?
в том-то и дело, что человек с датой регистрации 2004г очертил задачу более чем явно, дал список таблиц и описал их структуру.
а человек с датой регистрации 2010г в течение всего разговора что-то там у себя в голове нарисовал и вместо того, чтобы поделиться действительно необходимой структурой - нарезал понты.
 
zerkms
Какое отношение события имеют к планировщику, и тем более к логике которую нужно выполнить по расписанию в планировщике?
В рамках описанной задачи вроде как надо выполнить определённую логику в определённое время. И я вообще предлагаю выполнять её периодически не привязываясь к тому, были созданы тикеты или нет.

-~{}~ 05.04.10 16:07:

Ровно как и написано в варианте 1.
 
Mols
И я вообще предлагаю выполнять её периодически не привязываясь к тому, были созданы тикеты или нет.
да, пускай скрипт дёргается раз в минуту, как это принято в cron'е.

а вот что и как дёргать? :-) в ходе дискуссии панацеи найдено не было - любой из вариантов можно скомпрометировать при желании.
 
zerkms
Без претензий на панацею.
Общую концепцию того, чтобы выбрал я - уже написал тут.
Автор оригинала: Mols
....Думаю сделал бы интерфейс вида sendNotify и все объекты, которые могут потребовать извещений реализовывали бы этот интерфейс. А внутри sendNotify уже выполнялся бы поиск всех экземпляров по которым надо разослать извещения.
(Возможно не sendNotify а getAllNotify и рассылку отдельным модулем. Думать ещё надо.)

Хоть в базе их регистрируйте, хоть просто скрипт в крон(лучшего шедулера кстати наверное и желать не надо. Из базы без крона тоже не дёрнешь).
Но делать вариант 2 - ИМХО значит обречь себя на написание просто очень запутанной логики, которая будет поддерживать таблицу заданий в актуальном состоянии.
 
Mols
не совсем понимаю
Думаю сделал бы интерфейс вида sendNotify и все объекты, которые могут потребовать извещений реализовывали бы этот интерфейс.
т.е. sendNotify - это интерфейс, который реализует "тикет" (класс ticket). и речь вроде идёт о конкретном экземпляре объекта
А внутри sendNotify уже выполнялся бы поиск всех экземпляров по которым надо разослать извещения.
а тут говорится о методе поиска объектов

%)

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

ticket:
id | text | state | user_id | added

user:
id | login

вот схема данных, которая у нас есть. разрешены ЛЮБЫЕ ЕЁ МОДИФИКАЦИИ: можно изменять текущий набор полей (но лишь бы те же данные можно было уместить в новой схеме) + добавлять новые таблицы.

что делаем дальше? какие поля и куда добавляем?

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

(я расспрашиваю не потому, что я совершенно не понимаю, что вы имеете ввиду - а потому, что у этой реализации есть серьёзные проблемы с выборками интересующих данных, но хочу чтобы вы сами их обнаружили - ну или чтобы показали, что всё таки прекрасно и я паникую зря)
 
roles:
id | name

user:
id | login | role_id

ticket_actions:
id | ticket_id | action_id | user_id | datetime

ticket_to_user
id | ticket_id | user_ud | datetime

Понятно что любые операции с тикетом должны заполнять ticket_actions. Пока остановимся на том, что есть три операции "добавлен" "назначен" и "просмотрен".
Избавьте меня от написания СКЛ запросов и кода класса Тикет.

Но думаю не составит труда заносить все действия над тикетом в ticket_actions и определить когда был добавлен исполнитель в тикет. И что прошло более суток и он ещё не просмотрел задачу.

Далее в sendNotify() (само назнвание возможно неудачное, может быть лучше вариант Флоппика)

1. Надо найти все такие тикеты
2. Оповестить пользователей с теми ролями которые а) привязаны к тикету; б) должны быть оповещены об этой ситуации.

Таблицу с извещениями - тоже думаю не очень сложно сделать.

Далее - добавите логику "Делает больше недели" и т.д и т.п.
 
угу, я паниковал таки зря - всё ок.

предложение:
Таблицу с извещениями - тоже думаю не очень сложно сделать.
Но думаю не составит труда заносить все действия над тикетом в ticket_actions и определить когда был добавлен исполнитель в тикет
если представить - что уведомление о тикетах - специфичная для сущности тикет задача (иными словами - в системе больше не будет подобных вещей), тогда можно события уведомлений писать в ticket_actions тоже :-)

мысли насчёт этого? :-)
 
zerkms
Ну опять же смотреть по месту.
В данной структуре есть инициатор события - user_id. Можно для системных делать нулл. Ну не знаю в общем. Надо смотреть. Это ж всё на коленке и "в общих чертах". А детально сорри. И так довольно много времени ушло. Без обид)))

-~{}~ 05.04.10 17:21:

Да и структуру ещё думать надо....

-~{}~ 05.04.10 17:24:

Например роль наверное придётся таки в рамках ticket_to_user делать. Именно в рамках задачи... может же быть человек боссом для одной задачи и исполнителем для другой.
 
Угу, мерси :-)

Вот господа, примерно такого ответа я ожидал.
Не готовое решение, не вода, не философия, не мерянье IQ.
Коротко, по делу, детально :-) Респект
 
как это решает проблему
Уходя от этого сферического примера: в интернете мне попадался ряд сервисов (из последних навскидку - livemocha.com), которые, после некоторого периода неактивности начинают напоминать о себе, расспрашивая почему ты перестал заходить и какие же они клёвые (теперь стали).
приводя к нормали, описынные требования(с первой страницы) - поверка действий пользователя, будь то логин в систему, или просмотр тикета, оплата счёта.... зачем для этого создавать таблицы действие над тикетов, таблица входов, таблицу платежей. А какие случаи при эвенте делать, это уже другая задача, почти никак не связаная.
извиняюсь если что, не осилил всё что дальше первой страницы, но с первого поста задача показалась элементарной.
 
Сверху