WWW.DISS.SELUK.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА
(Авторефераты, диссертации, методички, учебные программы, монографии)

 

Pages:     | 1 || 3 | 4 |   ...   | 5 |

«Содержание Введение 1 Системы мониторинга 1.1 Введение 1.2 Понятие систем мониторинга 1.3 Подсистемы мониторинга 1.3.1 Сбор данных 1.3.2 Хранение данных 1.3.3 Анализ данных 1.3.4 Отчетность 1.3.5 Оповещения 1.3.6 ...»

-- [ Страница 2 ] --

Тдо – затраты труда на редактирование, печать и оформление документации.

Тдр = 100800,8/20 =403,2 чел.-ч.

Тдо = 0,75403,2 = 302,4чел.-ч.

Тд = 403,2+302,4= 705,6 чел.-ч.

С учетом уровня языка программирования трудоемкость разработки программы может быть скорректирована следующим образом:

где kкор – коэффициент изменения трудоемкости, берущийся из таблицы 4.1.

Таблица 4.1 – Коэффициенты трудоемкости языков програмирования Выбранный для разработки язык Java относится к алгоритмическим языкам сверхвысокого уровня, с учетом этого примем kкор = 0,85.

Подставив все полученные данные в формулу (1), получим полную трудоемкость разработки:Т = 80 + 141,12 + 322,56 + 322,56 + 1612,8 + 705,6 = 3184,64 чел.-ч.

трудоемкость разработки:Ткор = 0,85 3184,64 = 2707чел.-ч.

Наиболее распространенный и простой подход к оценке трудоемкости имеет следующий алгоритм.

эмпирическую формулу где tож – ожидаемая длительность работы;

tmin – минимальная длительность работы (этапа) по мнению эксперта;

tmax – максимальная длительность работы (этапа) по мнению эксперта.

Пример расчета ожидаемой продолжительности работ приведен в таблице 4. Таблица 4.2 – Ожидаемая продолжительность работ Наименование работ сбор данных Продолжение таблицы 4. Наименование работ программирования Java Суммарная продолжительность работ на этапе проектирования составляет 71 день (46 на компьютере).

Капитальные затраты на этапе проектирования рассчитываются по формуле где Zn – заработная плата проектировщика на всем этапе проектирования;

Мn–затраты на использование ЭВМ на этапе проектирования;

Hn – накладные расходы на этапе проектирования.

где zд– дневная заработная плата разработчика на этапе проектирования (определяется по практическим данным конкретной организации);

Tn – продолжительность работ на этапе проектирования;

ас–выплаты в государственные внебюджетные фонды;

Тогда, в нашем случае Zn = 476 * 71 * (1+0,34) = 45286,64 руб Расходы на машинное время состоят из расходов за процессорное время (при работе в сети) и расходов за дисплейное время. Формула для расчетов затрат на использование ЭВМ на этапе проектирования имеет вид где сп и сд – соответственно стоимость одного часа процессорного и дисплейного времени, руб.;

tп и tД–время, необходимое для решения задачи, соответственно процессорное и дисплейное.

Для нашего примера, так как программа разработана на ЭВМ Celeron 1, GHz, в процессорном времени необходимости нет, т.е. сп= 0 и tп= 0.

Для подсчета машинного времени определяем, что ЭВМ необходима на этапах программирования, отладки, тестирования. С учетом того, что в день ЭВМ работает 6 часа, получаем Исходя из этого определим затраты, связанные с ЭВМ:

Накладные расходы составляют 120 % от заработной платы персонала, занятого эксплуатацией программы (разработчика), и вычисляются по формуле Hn= 45286,64 * 1,2 = 54343,968 руб.

Теперь рассчитаем капитальные затраты на этапе проектирования Kn по формуле (4.4) и получим:

Kn= 45286,64 + 4416 + 54343,968 = 104046,608 руб.

4.2 Выбор базы сравнения В качестве аналога рассмотрим такой программный продукт как Cacti.

Cacti — веб-приложение (набор скриптов) которое поможет Вам мониторить состояние вашего сервера, CISCO и всего что может отдавать данные по SNMP протоколу. Обладает хорошим и понятным web-интерфейсом, расширяемостью за счет написания модулей для дополнительного функционала, наличием готовых шаблонов для многообразного оборудования.

Рассмотрим сравнительную характеристику с аналогом в таблице 4.3.

Таблица 4.3 – Сравнительная характеристика Параметры и характеристики Ручное Автоматизированное Надежность и удобствоиспользования Каждому i-му (i=5) выбранному показателю для сравнения определим коэффициент ki (коэффициент его весомости (важности)). Для этого каждый показатель оценим с использованием 10-балльной шкалы.

Оценки характеристик Ki и их соответствующие весовые коэффициенты ki сведены в таблице 4. Таблица 4.4 – Распределение восовых коэффициентов по характеристикам Характеристика Весовой Новое изделие (н) Изделие Аналог (а) удобствоиспользован Из формулы видно, что К = 38/32 = 1,1875 (больше 1), значит разрабатываемый продукт лучше, чем аналог.

Данные для расчета приведены в таблице 4.5.

Таблица 4.5 – Исходные данные для расчета экономического эффекта Численность обслуживающего персонала (N).

Стоимость машинного времени (Сд) (определяется по практическим данным конкретной организации).

практическим данным конкретной организации).

где Z – заработная плата проектировщика за месяц, которая составляет 5000 рублей;

ac – выплаты в государственные внебюджетные фонды;

эксплуатации программного продукта и аналога В качестве критериев для сравнения характеристик программного обеспечения наиболее важными для данного программного продукта являются эксплуатационные расходы:

• содержание персонала, занятого работой с программой • расходы на функционирование ЭВМ Расходы по различным видам работающих определяются следующей формуле:

где ni– численность персонала i-ro вида;

zi – среднегодовая зарплата работников i-ro вида;

k – процент занятости обслуживающего персонала при работе с аналогом и обслуживающим персоналом.

До внедрения программы время использования ЭВМ составляло:

Таким образом, после внедрения программы время использования ЭВМ составит:



Процент занятости ЭВМ составляет:

- до внедрения программы - после внедрения программы Численность персонала составляет ni = l человек. Найдем zi из произведения где tp – период работы, который составляет 12 месяцев;

kи – процентное исполнение работы с учетом занятости пользователя.

Рассчитаем заработную плату с начислениями на одного работника:

Z2 = 1 * 72000 * 0,5 * 1,34 = 48240 (руб.) Расходы на функционирование программы складываются из затрат на эксплуатационные принадлежности (бумага, краска для принтера и т.д.) и периферийного оборудования (принтер, плоттер, дискеты и т.д.).

В общем случае расходы на машинное время состоят из расходов на процессорное время (при работе с объектным и абсолютным кодом) и расходов на дисплейное время. Формула для расчетов имеет вид где сп и сд – соответственно стоимость одного часа процессорного и дисплейного времени, руб.; tп и tд – время, необходимое для решения задачи, соответственно процессорное и дисплейное. Так как программа разработана на современной мощной ЭВМ, то в процессорном времени необходимости нет, т.е.

tд1 = Fэф.р * Ka, tд2 = Fэф.р * Kпр, Fэф.р = N * t где Fэф.р. – эффективное рабочее время;

t – продолжительность рабочего дня.

До внедрения программы:

После внедрения программы затраты на использование ЭВМ составили:

Накладные расходы составляют 120 % от заработной платы персонала, занятого эксплуатацией программы, и вычисляются по формуле Hn1 = 96480 * 1,2 = 115776 руб.

Hn2 = 48240 * 1,2 = 57888 руб.

Прочие расходы составляют 3 % от суммы всех эксплуатационных расходов.

До внедрения программы они составили:

Pnp1 = (96480 + 24192 + 115776) * 0,03 = 7093,44 руб.

После внедрения программы они составили:

Pp2 = (48240 + 12096 + 57888) * 0,03 = 3546,72 руб.

Таким образом, эксплуатационные расходы составили:

до внедрения программы после внедрения программы производительности труда пользователя Если пользователь при выполнении работы J-го типа с применением программы экономит Tj часов, то повышение производительности труда Pj (%) определяется по формуле разработанной программы (ч);

Fj – время, которое отводится пользователю для выпол¬нения работы j-го типа до внедрения разработанной программы (ч).

Экономия, связанная с повышением производительности труда пользователя P, определяется по формуле где Z – среднегодовая заработная плата пользователя, с учетом процента занятости при использовании разрабатываемого проекта, равная Pn= 48240 * 100/100 = 48240 руб Если программы используют пользователи разной квалификации, то расчеты следует выполнить отдельно по каждой k-й квалификации, при этом где (Pn)k – экономия, полученная от повышения производительности труда пользователя k-й квалификации.

4.5 Ожидаемый экономический эффект и срок окупаемости капитальных затрат Ожидаемый экономический эффект рассчитывается после завершения предпроизводственной стадии создания программного продукта и определяется по формуле где Эд – годовая экономия;

Кн – капитальные затраты на проектирование;

Ен – нормативный коэффициент эффективности.

Годовая экономия Эд складывается из экономии эксплуатационных расходов и экономии в связи с повышением производительности труда проектировщика:

где Р1, Р2 соответственно эксплуатационные расходы до и после внедрения программы;

пользователя, Эd = (243541,44 - 121770,72) + 48240 = 170010,72 руб.

Тогда ожидаемый экономический эффект составит:

Э = 170010,72 – 0,15 * 104046,608 = 154403,7288 руб.

Рассчитаем цену реализации разработанного программного продукта, при условии, что планируемая прибыль от продажи должна составлять не менее 15 %.

Цену программного продукта рассчитаем по формуле где П– расчетная прибыль от реализации (П=15 %) Ц = 104046,608 * (1 + 0,15) = 119653,5992 руб.

Срок окупаемости капитальных затрат на проектирование программного продукта рассчитывается по формуле:

T = 104046,608 / 170010,72 = 0,61 (год) = 7,3 (мес) Полученный результат характеризует быстрый срок окупаемости затрат.

Данные расчетов экономических показателей сведены в таблицу 4.6.

Таблица 4.6 – Итоговая таблица обслуживающего персонала этапе проектирования Продолжение таблицы 4. Экономические Буквенное Единицы Значения показатели обозначение измерения Аналог Проект функционирование программы расходы повышения производительности труда экономический эффект продукта 5 Охрана труда и окружающей среды Данный раздел состоит из двух частей. Первая часть — аттестации рабочего места программиста. Вторая часть — рассмотрение альтернативных решений разрабатываемого продукта с точки зрения влияния на производительность труда.

5.1 Аттестация рабочего места программиста При аттестации рабочих мест проводится, по существу, аудит условий труда на рабочих местах предприятия сторонней аккредитованной организацией.

Результаты такого независимого аудита могут быть эффективно использованы работодателем для документально обоснованных его действий по всем направлениям обеспечения безопасных условий и охраны труда согласно Трудовому Кодексу РФ.

При вступлении России в ВТО товары отечественных предприятий смогут реально конкурировать с импортными товарами на внутреннем рынке (не говоря уже о внешнем) только случае, если на этих отечественных предприятиях будет сертифицирована по международным стандартам система качества. Составная часть сертификации системы качества - сертификация работ по охране труда на предприятии, начальным этапом которой является аттестация рабочих мест.

Рассмотрим рабочее помещение программиста. АлтГТУ, проспект Ленина, 46 ауд.303а.

1,2 — шкаф, 3 — диван, 4,9 — стол, 5,7,10 — рабочий стол, 6,8,11 — стулья.

Рассмотрим факторы повышенного риска, к которым отнесем шум, освещение, неионизирующие поля и излучения, напряженность труда.

Существующие на рабочем месте источники шума:

Внутренний шум (коридор, учебные аудитории) Lэ1 = 30 дБА Время воздействие перечисленных источников: постоянно.

Определим эквивалентный уровень шума Lэ2,1 по формуле (5.1).

где Lэ3,2 – эквивалентный уровень шума;

По таблице П.11.1 руководства Р 2.2.2006-05 определяется L1 по разнице шумов Lэ2 и Lэ3 в 6 дБА. L1 =1 дБ.

Суммарный уровень шума можно рассчитать по следующей формуле Lэ3,2 – величина эквивалентного шума (формула (5.1));

По таблице П.11.1 руководства Р 2.2.2006-05 определяется L2 по разнице шумов Lэ3,2 и Lэ1 в 9 дБА. L2 = 0,5 дБ.

Сравнивая значения таблицы 1 в СН 2.2.4_2.1.8.562–96 и результаты расчета по формуле (5.2), в соответствии с руководством Р2.2.2006-05 (таблица 4) уровень шума не превышает ПДУ, что соответствует 2 классу (допустимому).

5.1.2 Искусственная освещенность По СНиП 23-05-95* (таблица 2) при наименьшем размере объекта различения от 0,3 до 0,5 мм определяем разряд зрительных работ: Б. Так как относительная продолжительность зрительной работы при направлении зрения на рабочую поверхность составляет 70%, мы относим зрительные работы к подразряду «1», что соответствует нормированной освещенности при искусственном освещении Ен=300 лк.

Освещение рабочего места обеспечивается 2 светильниками, состоящими из 4 лампы Philips TL-D 18W/33 SLV (газоразрядная ртутная лампа низкого давления с трубчатой колбой диаметром 26 мм). Снизу лампы не закрыты.

Световой поток одного одной лампы Fлм= 1200 лм. Световой поток одного светильника Fсв= 4 * Fлм= 4 * 1200 = 4800 лм.

Освещенность рабочего места рассчитывается по следующей формуле где E – значение освещенности;

F –световой поток светильника, лм.;

Hп =2,5 м. - высота подвеса люстры над рабочей плоскостью;

k = 1,4 – коэффициент запаса (определен по таблице 7 пособия Малкиной Е.М. “Расчет искусственной освещенности в производственных помещениях” для помещений общественных и жилых зданий );

z – коэффициент неравномерности освещения, z = 1,0 (определен по таблице 6 пособия Малкиной).

– коэффициент использования осветительной установки;

приведена в следующей формуле где T – тип светильника;

pn= 70%– коэффициент отражения света от потолка;

pcm= 60%– коэффициент отражения света от стен;

ppn= 60%– коэффициент отражения света от рабочей поверхности.

Соотношение размеров освещаемого помещения определяется индексом помещения i по формуле из пособия Малкиной Е.М. “Расчет искусственной освещенности в производственных помещениях”.

При таком индексе помещения i = 1 и коэффициентах отражения, коэффициент использования светового потока определен методом интерполяции и равен = 69 % (Приложение 2, пособия Малкиной).

Результат вычислений по формуле (5.5) состовляет больше половины Ен и меньше Ен, и в соответствии с руководством Р2.2.2006-05 (таблица 12) условия труда по параметрам освещенности соответствуют 3 классу (вредному) степени.

излучения Самым мощным источником в компьютере является ЭЛТ монитор (монитор с электроннолучевой трубкой), но их вытеснили ЖК-мониторы, сила излучения, которых не выше фоновой. Таким образомвцелом излучение компьютера не выше естественного фона излучения.

Согласно руководству Р 2.2. 2006 - 05 (таблица 15) условия труда соответствуют 2 классу (допустимому).

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

5.1.4 Напряженность трудового процесса Используя таблицу 18 руководства Р 2.2.2006 — 05, заполним таблицу 5.1.

Таблица 5.1 – Классы условий труда по показателям напряженности трудового процесса Показатели Содержаниеработы Распределение функции по степени сложности задания + Продолжение таблицы 5. Показатели Размер объекта различения при длительности сосредоточенного внимания Работа с оптическими приборами при длительности сосредоточенного наблюдения Степень ответственности за результат собственной деятельности.

Значимостьошибки.

Количество конфликтных производственных ситуаций за смену + Число элементов (приемов), необходимых для реализации простого задания или в многократно повторяющихся операциях Продолжительность выполнения простых заданий или повторяющихся операций Наличие регламентированных перерывов и их продолжительность + Из таблицы 5.1 видно, что наибольший класс условий труда соответствует третьему степени 2, но он встречается не более 2-х раз, в соответствии с руководством Р 2.2.2006 - 05 общая оценка условий труда по напряженности трудового процесса соответствует 3 классу (вредному) 2 степени.

5.1.5 Взрывопожаробезопасность В помещении находится следующая мебель:

2 шкафа из древесностружечной плиты (ДСП) 5 столов из древесностружечной плиты (ДСП) 3 стула в изготовлении которого использовались метал, пластмасса и немного ткани 1 диван — металлическийкаркас, обшитый кожным заменителем и поролоновым наполнителем.

Для определения пожароопасной категории помещения необходимо подсчитать пожарную нагрузку Q по формуле где Gi — количество i-го материала пожарной нагрузки, кг;

Qpнi — низшая теплота сгорания i-го материала пожарной нагрузки, Мдж*кг-1.

Также необходимо подсчитать удельную пожарную нагрузку g по формуле где S - площадь размещения пожарной нагрузки, м2 (но не менее 10 м2).

Для определения низшей теплоты сгорания в таблице 5.2 приведены ее значения для некоторых материалов.

Таблица 5.2 — Низшая теплота сгорания веществ Вещества и материалы Линолеум:поливинилхлоридный 14, Суммарная масса древесных изделий состовляет 250 кг, линолеума — кг, бумаги (обои, документы) — 10 кг.

Подсчитаем пожарную нагрузку по формуле (1) Q = 250 * 16,6 + 30 * 14,31 + 10 * 13,4 = 4713,3 МДж Теперь подсчитаем удельную пожарную нагрузку по формуле (5.7) g = 4713,3/28 = 168 МДж*м- В соответствии с НПБ 105-03 (таблица 4) помещения, в которых удельная пожарная нагрузка состовляет не больше 180 Мдж*м-2 равна В4.

Так как площадь этажа между противопожарными стенами 1-го типа, определяемыми по ГОСТ Р 12.3.047-98 таблица У.1, меньше 2000 м2 и в соответствии с СНиП 2.08.02-85 степень огнестойкости равна III.

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

Одно из условий обеспечения пожаробезопасности - ликвидация возможных источников воспламенения.

В лаборатории источниками воспламенения могут быть:

электропроводке, электрических розетках и выключателях. Для исключения возникновения пожара по этим причинам необходимо вовремя выявлять и устранять неисправности, проводить плановый осмотр и своевременно устранять все неисправности;

неисправные электроприборы. Необходимые меры для исключения пожара включают в себя своевременный ремонт электроприборов, качественное исправление поломок, не использование неисправных обогревание помещения электронагревательными приборами с открытыми нагревательными элементами. Открытые нагревательные поверхности могут привести к пожару, так как в помещении находятся бумажные документы и справочная литература в виде книг, пособий, а бумага – легковоспламеняющийся предмет. В целях обогревательные приборы в помещении лаборатории;

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

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

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

При наличии небольшого очага пламени можно воспользоваться подручными средствами с целью прекращения доступа воздуха к объекту возгорания.

5.1.6 Электробезопасность В помещении 4 электрические розетки с заземлением с наклейками номинального напряжения подоваемего на них. На рабочем месте программиста из всего оборудования металлическим является лишь корпус системного блока компьютера, но здесь используются системные блоки, отвечающие стандарту фирмы IBM, в которых кроме рабочей изоляции предусмотрен элемент для заземления и провод с заземляющей жилой для присоединения к источнику питания.

К основным причинам поражения программиста электрическим током на рабочем месте можно отнести:

Прикосновение к металлическим нетоковедущим частям системного блока ПЭВМ, которые могут оказаться под напряжением в результате повреждения изоляции.

Запрещенное использование электрических приборов, таких как электрические плиты, чайники, обогреватели.

Все токоведущие части ЭВМ изолированы, то случайное прикосновение к токоведущим частям исключено, а запрещенные электрические приборы не используются.

Влажность в помещении не превышает 60% и технологическая пыль отсутствует, поэтому по ПУЭ помещение относится ксухому и не пыльному.

Полы в помещении не являются токопроводящими, температура контролируется автоматической системой кондиционирования и колеблется в пределах от 22 до 24 градусов Цельсия. Системные блоки компьютеров расположены на специальных полках компьютерных столов, что препятствует возможности одновременного прикосновения человека к металлоконструкциям зданий и к металлическим корпусам электрооборудования.

Из всего вышесказанного и согласно ПЭУ от 08.07.2002 рассматриваемое помещение можно отнести к 1 классу помещений без повышенной опасности.

5.1.7 Травмобезопасность В помещении находится следующее оборудование:

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

механизмы, подвижные столы, вращающиеся детали, органы незаземленное оборудование и др.;

попадании их на кожу или в легкие при вдыхании;

нагретых элементов оборудования, перерабатываемого сырья, Примерами таких элементов являются горячие трубопроводы, крышки котлов, танков, корпуса оборудования, детали холодильных предметов и падения человека в результате подскальзывания, запинания, падения с высоты или внезапного ухудшения здоровья.

Из движущихся предметов на рабочем месте имеется только стул, но его масса слишком мала чтобы причинить вред здоровью. Электробезопасность уже была рассмотрена выше. Из ядовитых веществ на рабочем месте имеется только тонер в лазерном принтере, но принтер печатает не много и помещение часто проветривается, поэтому влияние минимально. На рабочем месте не используютсянагревательные элементы. Вероятность получить травму в результате падения высокая, так как мебели на рабочем месть много и расположена она не удачно и много острых углов.

Все оборудование находится в исправном техническом состоянии, розетки для подключения электрооборудования имеют заземление и подписаны соответственно номинальному напряжению. Также в помещении находится инструкция по технике безопасности.

По МУ ОТ РМ 02-99 условия труда по травмобезопасности относятся к классу (оптимальные).

5.2 Обзор альтернативных программных решений с точки зрения повышения производительности труда 5.2.1 Обзор системы Zabbix В любой сети, где есть больше, чем один сервер, очень полезно бывает иметь перед глазами полную картину происходящего. В крупных сетях, где количество хостов переваливает за несколько десятков, следить за каждым в отдельности — непосильная задача для администраторов. Для облегчения задачи наблюдения применяются системы мониторинга и одной из них является Zabbix.

5.2.1.1 Общие сведения Zabbix создан Алексеем Владышевым и в настоящее время активно разрабатывается и поддерживается ZabbixSIA.

корпоративного класса.

Zabbix это программное обеспечение мониторинга многочисленных параметров сети а также состояния и работоспособности серверов. Zabbix использует гибкий механизм уведомлений, что позволяет пользователям настраивать оповещения по почте практически для любого события. Это дает возможность быстро среагировать на проблемы с сервером. Zabbix предлагает отличные возможности отчетности и визуализации данных, базируясь на собранных данных. Это делает Zabbix идеальным инструментом для планирования и масштабирования.

GPLGeneralPublicLicense версии 2. Это означает, что его исходный код свободно распространяется и доступен широкой публике.

Так же доступна коммерческая поддержка, которая предоставляется компанией Zabbix.

Zabbix предлагает:

автоматическое обнаружение серверов и других устройств в сети администрированием через ВЕБ поддержка обеих механизмов пуллеров и трапперов серверное программное обеспечение для Linux, Solaris, HP-UX, AIX, программное обеспечение для Linux, Solaris, HP-UX, AIX, FreeBSD, Windows 2003, WindowsXP, WindowsVista) безопасная аутентификация пользователей гибкая система прав доступа пользователей гибкая система уведомлений по e-mail о предопределенных высокоуровневый (класса “Бизнес”) вид контроля ресурсов Открытое программное обеспечение агенты с высокой эффективностью для UNIX и WIN32 платформ увеличивает рентабельность (простои очень дорого обходятся) низкая стоимость обслуживания очень простое конфигурирование высокоуровневое дерево предоставляемых услуг очень простая установка поддержка SNMP (v1,v2,v3). Оба режима пуллера и траппера.

возможность визуализации встроенный механизм очистки устаревших дынных 5.2.1.2 Описание основных функций Система состоит из нескольких частей, и при большой нагрузке и наблюдении за очень большим количеством хостов позволяет разнести эти части на несколько раздельных машин.

Zabbix состоит из собственно сервера мониторинга, который выполняет периодическое получение данных, обработку, анализ и запуск скриптов оповещения базы данных (MySQL, PostgreSQL, SQLite или Oracle) агента — демона, который запускается на отслеживаемых объектах и предоставляет данные серверу. Агент опционален, мониторинг можно производить не только с помощью него, но и по SNMP (версий 1, 2, 3), запуском внешних скриптов, выдающих данные, и несколько видов предопределенных встроенных проверок, таких как Основная логическая единица — Узлы сети (host), сервера, находящиеся под наблюдением. Каждому серверу присваивается описание и адрес (dns или ip, можно оба, причем возможностью выбирать, что использовать для соединения).

Узлы объединяются в группы, например веб-сервера или сервера баз данных. Группы служат для вывода только определенных серверов при наблюдении.

Каждый узел имеет несколько Элементов данных (items) — параметров, за которыми ведется мониторинг. К примеру, на всех серверах у меня есть параметр ping, (он получается с помощью встроенной проверки), который равняется 1, если ответ на последний ping-запрос был получен, иначе 0. А на одном из серверов у меня есть параметр «количество пользователей онлайн», который собирается самописным скриптом из базы данных сайта. Для каждого элемента данных можно указать свой период обновления, способ хранения (сам параметр или скорость его изменения), множитель, временной интервал сбора (например, только в рабочее время).

Создавать элементы данных для каждого из множества серверов — сложно, поэтому можно создать узлы-шаблоны. Эти узлы тоже содержат элементы данных, но они не мониторятся напрямую. Вместо этого реальный хост связывается с одним или несколькими шаблонами, и все параметры шаблона автоматически наследуются хостом.

Zabbix предоставляет гибкие возможности по настройке условийтриггеров, которые включаются при авариях и неполадках, и система начинает сигнализировать администратору, что что-то случилось. При включении триггера веб-интерфейс начинает издавать звуковые сигналы.

У Zabbix есть возможность отправить уведомление на почту, в jabber или sms с помощью gsm-модема, или даже попытаться самостоятельно восстановить сервис Рисунок 5.4 – Интерфейс настройки триггеров По данным любого параметра система сможет построить график изменения за любой промежуток времени с максимальным разрешением. Имеется возможность создавать сложные графики, отображающие на одном поле несколько параметров Рисунок 5.5 – График построенный по результатам Для отображения логической структуры сети имеется возможность создавать карты сети, отображающие именно расположение узлов сети и связей между ними. Естественно, состояние узлов (доступен или нет) отображается и на карте.

Имеются комплексные отчеты, которые позволяют на одном экране просматривать сразу несколько сущностей — графики, данные, триггеры… Zabbix — довольно мощная и обширная система, и запасе у него есть еще полдесятка функций, которые позволяют еще больше упростить наблюдение за сетью, такие как мониторинг состояния веб-сайта с помощью автоматического выполнения сценария.

5.2.1.3 Удобство использования Веб-интерфейс консоли управления реализован через обращение PHP скриптов напрямую к СУБД. Поддерживается SSL. Автоматическое отсоединение после 30 минут бездействия. После 5 неудачных попыток доступ блокируется на минуту, а IP-адрес показывается настоящему администратору.

Консоль отображает состояние контролируемых объектов и параметров, состояние триггеров, историю событий и реакций оператора, карту сети и графики изменения параметров.

Можно выбрать несколько объектов из списка, нажимая Ctrl одновременно с указанием мышью.

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

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

Нельзя составлять выражения из элементов данных.

Карта позволяет наглядно показать связь хостов между собой, картинку (общие размеры задаются в пикселях) необходимо рисовать самостоятельно, задавая вручную координаты (в пикселях) иконок хостов на плоскости и какой хост с каким соединён. Новые иконки (встроенные ужасны) загружаются в общих настройках (PNG, 48x48 или 24x24). Там же можно загружать фоновые картинки (масштабирование при визуализации не производится). Рекомендуется предварительно задуматься о прозрачности. Удаления иконок нет. В общих настройках карты указывается тип подписей (указанную при составлении карты подпись и статус, IP адрес и статус, имя хоста и статус, только статус хоста или совсем ничего) к иконкам и где их размещать по умолчанию.

Для каждого элемента карты указываются иконка изображает состояние всех триггеров хоста (Host, узел сети) иконка изображает состояние всех элементов карты иконка изображает состояние триггера иконка изображает состояние всех триггеров всех хостов группы подпись к иконке (общие настройки карты) расположение подписи, если не по умолчанию хост, группа или триггер в зависимости от типа элемента карты имя иконки для объекта в нормальном состоянии, при наличии проблемы, при неопределённом состоянии, при отключённом URL, который будет связан с иконкой (иначе будет доступ к Для каждого соединения элементов карты указываются элементы карты, которое оно соединяет тип и цвет линии для нормального состояния набор триггеров, позволяющих изменить тип линии и цвет К узлам карты могут быть приписаны скрипты (Администрирование Скрипты). При задании команды можно использовать макросы. В комплекте идут ping и traceroute (запускаются на сервере, результат в окне браузера). В настройках скриптов можно задать допустимую группу пользователей, группу хостов и наличие прав на чтение или запись.

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

определённые пользователем графики обзор триггеров для группы хостов вложенные произвольные страницы (URL) Ячейки можно сливать по горизонтали и вертикали, выравнивать содержимое по горизонтали и вертикали.

Из экранов можно делать слайд-шоу, задав последовательность экранов и интервал демонстрации каждого из них.

Инвентаризация - поиск и просмотр профилей узлов (модель, серийный номер и пр.). Увы - их придётся в начале задать.

Есть аудит действий системы (action) и действий администратора (вход, выход, добавление, удаление, изменение).

учетными записями аутентификации: собственная (имена и пароли, хранятся в БД в зашифрованном виде), от Apache, LDAP. В случае аутентификации Apache и LDAP пользователь в смысле Zabbix тоже должен существовать, но его пароль не используется. При использовании LDAP пользователи из группы, для которой указан метод доступа "Internal", будут аутентифицироваться локально. Типы пользователей:

ZABBIXUser (доступ к меню мониторинга, по умолчанию не имеет доступа ни к каким хостам и группам, необходимо предоставлять доступ явно), ZABBIXAdmin (доступ к меню мониторинга и конфигурации, по умолчанию не имеет доступа ни администрирования; имеет неотзывный доступ на чтение и запись ко всем хостам и группам). Для пользователя также задаются: входное имя, имя собственное, фамилия, список групп, среда передачи сообщений (Media), язык (русский есть), тема оформления, использование куки для автоматического входа, выход по неактивности, начальный URL, интервал обновления экрана. Здесь же можно посмотреть права доступа, определяемые членством в группах. Пользователь может самостоятельно настроить (в профиле): пароль, язык, тему оформления, использование куки для автоматического входа, начальный URL, интервал обновления экрана. По умолчанию создаются пользователи Admin (максимальные права) и Guest (минимальные права, в этом режиме с системой могут работать незарегистрированные пользователи). Управление правами доступа осуществляется с помощью включения пользователя в группы пользователей и задании хостов, к которым пользователи группы могут иметь доступ на чтение и запись. Для членов группы определяется: список пользователей, доступность вебинтерфейса (включить, выключить, системные умолчания), заблокированность пользователя, права на запись/чтение и чтение к группам хостов, группы, доступ к которым запрещён. Можно создавать свои группы пользователей, и имеются группы пользователей по-умолчанию:

Zabbixadministrators (члены этой группы получают извещения о 5.2.1.5 Поддерживаемые платформы Таблица 5.3 – Поддерживаемые платформы Zabbix 2000, Windows 2003, Windows XP, Windows Vista 5.2.2 Превосходство над аналогами В качестве альтернативных программных решений будем рассматривать такие программные продукты как Zabbix, рассмотренный выше, Nagios, Cacti, т. к.

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

Разрабатываемый продукт имеет два основных весомых достоинства перед аналогичными программами:

дешевизна расширения Распределенность системы заключается в том, что все узлы равноправны и их количество не ограниченно каким-то значением. Среди узлов нет «главных», а значит нет центра из которого все регулируется, а значит и нет опасности потерять с ним связь и терять драгоценное процессорное время.

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

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

Просто устанавливается часть ядра системы и узел готов к работе.

Помимо двух основных преимуществ есть еще:

полнаякросплатформенность.

б) Возможность управлять системой из любого узла системы в) Абсолютная свобода в выборе и написании задач для выполнения на После всего выше сказанного можно сделать выводы Рассматриваемые альтернативные решения уже какое-то время присутствуют на рынке и уже заняли свою нишу. Имеют свою плюсы и минусы, повышает эффективность труда работника.

Разрабатываемый продукт лучше как минимум в двух рассматриваемых категориях.

Рассмотренные превосходства над аналогичными решениями не только повышают производительность труда, но и снижают финансовые затраты.

Разрабатываемый продукт очень гибкий в использовании инструмент, поэтому он может быть использован большим числом работников для своих нужд.

В результате работы над дипломным проектом была выдвинута и исследована идея построения распределенной системы мониторинга гетерогенной среды. Были изучены аналоги в сфере современных систем мониторинга, произведена оценка их эффективности и применимости согласно выдвинутой модели требований. В следствии чего, были сделаны выводы о необходимости появления нового класса инструментов мониторинга, в виду неготовности существующих решений удовлетворять видвигаемым к ним требованиям.

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

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

Спроектированное и разработанное в рамках дипломного проекта программное обеспечение каркаса распределенной системы мониториннга может быть использованно для построения высоконагруженных систем мониторинга и дисетчеризациипроцессов на базе распределенных гетероегенных сетей.

В первую очередь проект ориентирован на использование в комерческом секторе для обеспечения отказоустойчивости серверов, рабочих станций и встраиваемых устройств, работающих под большой нагрузкой в режиме 24/7.

Можно выделить несколько путей развития проекта:

разработка дополнителных модулей мониторинга для решений круга реализация программного обеспечения службы мониторинга на нативном ЯП (например, на С++) с целью повышения быстродействия и надежности целевой системы;

совершенствование компонентов и оптимизация алгоритмов базовой платформы службы монторинга;

полномасштабное внедрение и нагрузочное тестирование системы на базе существующей инфраструктуры предприятия, например лаборатории МикроЭВМАлтГТУ;

сопровождение системы, информационная и техническая поддержка пользователей и администраторов.

Список использованных источников 1. Таненбаум, Э. Распределенные системы. Принципы и парадигмы / Э.

Таненбаум, М. Ван Стеен. — СПб.: Питер, 2003. — 877 с: ил. — (Серия «Классика computerscience»).

2. Буч, Г. Объектно-ориентированный анализ и проектирование с примерами приложений / Г. Буч, Р. Максимчук, М. Энгл, Б. Янг, Д. Коналлен, К.

Хьюстон – Вильямс, 2010. – 720 с: ил.

3. Homepage of Zabbix [Электронный ресурс]/ Режим доступа:

http://www.zabbix.com 4. Ganglia Monitoring System [Электронный ресурс]/ Режим доступа:

http://ganglia.sourceforge.net 5. Nagios [Электронный ресурс] / Режим доступа: http://www.nagios.org 6. Mon – Service Monitoring Daemon [Электронный ресурс] / Режим доступа:

https://mon.wiki.kernel.org/index.php/Main_Page 7. Network Monitoring Software Tools with Big Brother by Quest Software [Электронный ресурс] / Режим доступа: http://www.quest.com/big-brother 8. Network Monitoring | Zenoss [Электронный ресурс] / Режим доступа:

http://www.zenoss.com/product/network 9. Eclipse Project [Электронный ресурс] / Режим доступа:

http://www.eclipse.org/ 10. NetBeans Project [Электронный ресурс] / Режим доступа:

http://www.netbeans.org/ 11. Сайт IntelliJIDEA [Электронный ресурс] / Режим доступа:

http://www.jetbrains.com/idea/ 12. Apache log4j [Электронный ресурс] / Режим доступа:

http://logging.apache.org/log4j/ 13. Henning, Michi. Distributed Programming with Ice [Электронный ресурс]: / Michi Henning, Mark Spruiell; ZeroC, Inc., 2009. - Режим доступа:

http://zeroc.com/download/Ice/3.3/Ice-3.3.1.pdf 14. Гамма, Э. Приемы объектно-ориентированного проектирования. Паттерны проектирования / Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес. – СПб.: Питер, 2009. – 366 с.

15. Сайт Java [Электронный ресурс] / Режим доступа: http://java.com/en/ 16. Сайт Python [Электронный ресурс] / Режим доступа:

http://www.python.org/ 17. Java Universal Network/Graph Framework. [Электронный ресурс] / Режим доступа: http://jung.sourceforge.net/index.html 18. Apache subversion [Электронный ресурс] / Режим доступа:

http://subversion.apache.org/ 19. Олифер, В. Г. Компьютерные сети. Принципы, технологии, протоколы.

Учебник для вузов / В.Г. Олифер, Н. А. Олифер. — СПб.: Питер, 2007. — Задание на дипломное проектирование Б.1 Организация среды исполнения Для того чтобы запустить ядро на узле, необходимо предварительно развернуть систему исполнения. Для этого потребуется:

а) установить виртуальную машину Java (JRE) не ниже версии 1.4;

б) установить интерпретатор языка Python предпочтительной версии Требуемое программное обеспечение не является специфичным, а наоборот очень распространено. Поэтому никаких трудностей установка не доставит. К тому же никаких дополнительных настроек интерпретаторы не требуют. Единственное, что необходимо, это добавление путей до исполняемых файлов интерпретаторов в переменную система PATH. Это необходимо чтобы интерпретаторы могли запускаться из любой директории в командной строке.

Приложение ядра распространяется в виде бинарных файлов, что означает отсутствие необходимости установки. Достаточно скопировать архив на в ПЗУ узла и ядро готово к работе. Рекомендуемым вариантом эксплуатации, является запуск программы как сервиса windows, либо как программы демона в семействах unix. Запуск программ в фоновом режиме в unix системах осуществляется стандартными средствами операционной системы (за подробностями необходимо обратиться к справочной документации вашего дистрибутива).

В комплекте с бинарными файлами идут два скриптовых файла (рисунок Б.1). В них содержатся ключи для интерпретаторов и начальные настройки приложения. Первый файл это snoopyd.cmd используется в операционных семействах Windows. Второй – snoopyd.sh используется в операционных системах семейства unix.

Если во время запуска возникли проблемы, необходимо проверить:

а) занесены ли пути до исполняемых файлов интерпретаторов в б) сохранен ли файл в той кодировке, которая правильно декодируется в вашей операционной системе;

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

г) проверить наличие конфигурационных файлов, указанных в скриптах.

После запуска ядра, если оно запущено как приложение, то в стандартный поток вывода консоли начнутся печатать сообщения ядра. О настройке подробности печатаемых сообщений необходимо обратиться к документации библиотеки log4j на официально сайте apache[link].

Запуск на одном узле нескольких ядер возможен, но не рекомендуется. Для взаимодействия используется NUID, который уникален для каждого ядра, но для отображения пользователю используется имя узла.

Рисунок Б.2 – Вывод сообщений ядра в консоль Б.3 Работа с панелью управления Структура главного окна панели довольно проста:

а) дерево узлов;

б) область служебных окн;

в) карта узлов (Network Map);

г) текстовый редактор (Notepad);

д) свойства узлов и модулей (properties);

е) результаты работы модулей (results).

Б.3.1 Запуск панели управления Панель управления так же как и ядро распространяется в виде бинарных файлов. Но в отличии от ядра требует только наличия виртуальной машины Java.

Это означает, что на любом узле, где запущено ядро, панель управления тоже запустится. В комплекте поставки так же имеются два исполняемых скрипта для ОС семейства windows и unix. При возникновении трудностей необходимо обратиться к пункту Б.2 Запуск ядра, в котором описаны некоторые способы устранение неполадок.

После запуска одного из стартовых скриптов появится главное окно (рисунок Б.3). Точкой входа в сеть может быть любой узел сети или подсети. Если узел отделен о ядра или ни одного ядра не запущено, то в главном окне ничего не будет отображено.

После запуска панели необходимо время для регистрации узлов у домене.

Это может занять несколько секунд. В это время в главном окне может ничего не отображаться.

Б.3.2 Развертывание модуля узла достаточно:

1) во встроенном текстовом редакторе File -> Notepad написать исходный код модуля. Так же можно загрузить уже готовый 2) выбрать из списка доступных(Avaliable) узлов те узлы, к которым необходимо прикрепить задачу, и перемещаем их в список узлов, на выставить начальные параметры;

Рисунок Б.5 – Выбор узлов для развертывания модуля 3) после нажатия кнопки Deploy, ждать результатов выполнения задачи.

Б.3.3 Просмотр информации Дерево узлов доступно сразу и не требует абсолютно никаких дополнительных действий со стороны пользователя. Оно обновляется автоматически.

Для просмотра карты узлов необходимо выбрать Network -> View full map.

После этого появится отдельно окно с изображение графа.

Для просмотра свойств узла или модуля, необходимо в соответствующем контекстном меню выбрать пункт Properties.

Для просмотра результатов работы модулей необходимо выбрать в контекстном меню соотвествующего узла или модуля пунка Results.

Рисунок Б.8 – Списко результатов работы модулей // ********************************************************************** // Copyright 2011 Snoopy Project // Licensed under the Apache License, Version 2.0 (the "License");

// You may not use this file except in compliance with the License.

// You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2. // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

// See the License for the specific language governing permissions and // limitations under the License.

// ********************************************************************** #ifndef SNOOPYD_ICE #define SNOOPYD_ICE #include module com { module googlecode { module snoopyd { interface IKernelSession extends ISession interface IUserSession extends ISession module driver exception ModuleNotFoundException void discover(Ice::Identity identity);

session::IKernelSession* createKernelSession(Ice::Identity identity, session::IKernelSession* selfSession);

session::IUserSession* createUserSession(Ice::Identity identity, session::IUserSession* selfSession);

void undeploy(string muid) throws ModuleNotFoundException;

ModuleNotFoundException;

void synchronize(Ice::Identity identity, IScheduler* remoteScheduler);

void schedule(string muid, LongArray delays, StringArray params);

void unschedule(string muid) throws ModuleNotFoundException;

void force(Ice::Identity identity, string muid, StringArray params);

}; }; };

#endif /** * Copyright 2011 Snoopy Project * Licensed under the Apache License, Version 2.0 (the "License");

* You may not use this file except in compliance with the License.

* You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2. * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and * limitations under the License.

package com.googlecode.snoopyd;

import com.googlecode.snoopyd.core.Snoopyd;

public class Launcher { public static void main(String[] args) { int status = snoopyd.main(Defaults.APP_NAME, args, Defaults.CONFIGURATION));

/** * Copyright 2011 Snoopy Project * Licensed under the Apache License, Version 2.0 (the "License");

* You may not use this file except in compliance with the License.

* You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2. * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and * limitations under the License.

package com.googlecode.snoopyd;

public final class Defaults { public static final String APP_NAME = "snoopyd";

public static final String APP_VER = "0.0.0";

public static final String CONFIGURATION = "snoopyd.conf";

public static final String PRIMARY_ADAPTER_NAME = "PrimaryAdapter";

public static final String SECONDARY_ADAPTER_NAME = "SecondaryAdapter";

public static final int DISCOVER_INTERVAL = 5000;

public static final int DISCOVER_TIMEOUT = 6 * DISCOVER_INTERVAL;

public static final int ALIVE_INTERVAL = 15000;

public static final int MODULER_INTERVAL = 15000;

public static final int NETWORKER_INTERVAL = 3000;

public static final int RESULTER_THRESHHOLD = 5;

public static final String KERNEL_THREAD_NAME = "Kernel-Thread";

public static final String ALIVER_THREAD_NAME = "Aliver-Thread";

public static final String DISCOVERER_THREAD_NAME = "Discoverer-Thread";

public static final String INVOKER_THREAD_NAME = "Invoker-Thread";

public static final String MODULER_THREAD_NAME = "Moduler-Thread";

public static final String TIMER_THREAD_NAME = "Timer-Thread";

public static final String INVOKATION_THREAD_NAME = "Invokation-Thread";

public static final String RESULTER_THREAD_NAME = "Resulter-Thread";

* This is rate from my first laptop (Samsung R20).

public static final int BASELINE_RATE = 912;

/** * Copyright 2011 Snoopy Project * Licensed under the Apache License, Version 2.0 (the "License");

* You may not use this file except in compliance with the License.

* You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2. * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and * limitations under the License.

package com.googlecode.snoopyd.core;

import org.apache.log4j.Logger;

import com.googlecode.snoopyd.Defaults;

import com.googlecode.snoopyd.adapter.Adapter;

import com.googlecode.snoopyd.core.event.KernelEvent;

import com.googlecode.snoopyd.core.event.SnoopydStartedEvent;

import com.googlecode.snoopyd.core.event.SnoopydTerminatedEvent;

import com.googlecode.snoopyd.driver.Driver;

import com.googlecode.snoopyd.util.Identities;

public class Snoopyd extends Ice.Application { private static Logger logger = Logger.getLogger(Snoopyd.class);

public static final int EXIT_SUCCESS = 0;

public static final int EXIT_FAILURE = 999;

public static class ShutdownHook extends Thread { public ShutdownHook(Kernel kernel) { KernelEvent event = new SnoopydTerminatedEvent();

public int run(String[] args) { logger.info("running " + Defaults.APP_NAME + " " + Defaults.APP_VER);

Kernel kernel = new Kernel(communicator());

logger.debug("... identity: " + Identities.toString(kernel.identity()));

logger.debug("... hostname: " + kernel.hostname());

logger.debug("... rate: " + kernel.rate());

logger.debug("setting shutdown hook for snoopyd");

setInterruptHook(new ShutdownHook(kernel));

logger.info("fetching kernel drivers:");

logger.info("fetching drivers adapters: ");

kernel.handle(new SnoopydStartedEvent());

kernel.waitForTerminated();

/** * Copyright 2011 Snoopy Project * Licensed under the Apache License, Version 2.0 (the "License");

* You may not use this file except in compliance with the License.

* You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2. * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and * limitations under the License.

package com.googlecode.snoopyd.core;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.net.InetAddress;

import java.net.UnknownHostException;

import java.util.Collection;

import java.util.Collections;

import java.util.HashMap;

import java.util.LinkedList;

import java.util.List;

import java.util.Map;

import java.util.Properties;

import java.util.Queue;

import org.apache.log4j.Logger;

import Ice.Identity;

import com.googlecode.snoopyd.Defaults;

import com.googlecode.snoopyd.adapter.Adapter;

import com.googlecode.snoopyd.adapter.DiscovererAdapter;

import com.googlecode.snoopyd.adapter.SessionierAdapter;

import com.googlecode.snoopyd.core.event.KernelEvent;

import com.googlecode.snoopyd.core.filter.KernelFilter;

import com.googlecode.snoopyd.core.filter.KernelFilter.FilterAction;

import com.googlecode.snoopyd.core.filter.ToogleFilter;

import com.googlecode.snoopyd.core.state.KernelListener;

import com.googlecode.snoopyd.core.state.KernelState;

import com.googlecode.snoopyd.core.state.SuspenseState;

import com.googlecode.snoopyd.driver.Activable;

import com.googlecode.snoopyd.driver.Aliver;

import com.googlecode.snoopyd.driver.Configurer;

import com.googlecode.snoopyd.driver.Controller;

import com.googlecode.snoopyd.driver.Discoverer;

import com.googlecode.snoopyd.driver.Driver;

import com.googlecode.snoopyd.driver.Hoster;

import com.googlecode.snoopyd.driver.Moduler;

import com.googlecode.snoopyd.driver.Networker;

import com.googlecode.snoopyd.driver.Resulter;

import com.googlecode.snoopyd.driver.Scheduler;

import com.googlecode.snoopyd.driver.Sessionier;

import com.googlecode.snoopyd.driver.Startable;

import com.googlecode.snoopyd.session.IKernelSessionPrx;

import com.googlecode.snoopyd.session.IKernelSessionPrxHelper;

import com.googlecode.snoopyd.session.ISessionPrx;

import com.googlecode.snoopyd.session.KernelSession;

import com.googlecode.snoopyd.session.KernelSessionAdapter;

import com.googlecode.snoopyd.util.Identities;

import com.googlecode.snoopymm.IModuleManagerPrx;

import com.googlecode.snoopymm.IModuleManagerPrxHelper;

public class Kernel implements Runnable { public static class KernelException extends RuntimeException { public KernelException(String msg) { public static Logger logger = Logger.getLogger(Kernel.class);

private Identity identity;

private Ice.Communicator communicator;

private Ice.Properties properties;

private Ice.ObjectAdapter primary;

private Ice.ObjectAdapter secondary;

private Thread self;

private KernelState state;

private int rate;

private Properties configuration;

private Queue pool;

private HashMap adapters;

private Map parents;

private Map childs;

private Map cache;

private List kernelListeners;

private List kernelFilters;

private IModuleManagerPrx moduleManager;

private IKernelSessionPrx selfSession;

private boolean started;

public Kernel(Ice.Communicator communicator) throws KernelException { this.rate = Integer.MIN_VALUE;

this.pool = new LinkedList();

this.cache = new HashMap();

this.parents = new HashMap();

this.childs = new HashMap();

this.state = new SuspenseState(this);

this.communicator = communicator;

this.properties = communicator.getProperties();

this.identity = Identities.randomIdentity(properties logger.debug("init kernel drivers");

initDrivers();

logger.debug("init kernel adapters");

initAdapters();

logger.debug("init primary ice adapter");

initPrimaryAdapter();

logger.info("primary adapter endpoints is a \"" logger.debug("init secondary ice adapter");

initSecondaryAdapter();

logger.debug("primary secondary endpoints is a \"" logger.debug("init kernel listeners");

initKernelListeners();

logger.debug("init kernel filters");

initKernelFilters();

logger.debug("init kernel rate");

initKernelRate();

logger.debug("init self session");

initSelfSession();

logger.debug("starting kernel thread");

self = new Thread(this, Defaults.KERNEL_THREAD_NAME);

self.start();

public String hostname() { return InetAddress.getLocalHost().getHostName();

} catch (UnknownHostException ex) { public String os() { return System.getProperty("os.name");

public Properties configuration() { return configuration;

public void reconfigure(Map configuration) { checkKernelThread();

for (String key: configuration.keySet()) { this.configuration.put(key, configuration.get(key));

public Identity identity() { return identity;

public int rate() { public IKernelSessionPrx self() { return selfSession;

public String primaryPublishedEndpoints() { return primary.getPublishedEndpoints()[primary.getPublishedEndpoints().length public String secondaryPublishedEndpoints() { return secondary.getPublishedEndpoints()[secondary public String primaryEndpoints() { return primary.getEndpoints()[primary.getEndpoints().length - 1] public String secondaryEndpoints() { return secondary.getEndpoints()[secondary.getEndpoints().length - 1] public Ice.Communicator communicator() { public Ice.Properties properties() { public Ice.ObjectAdapter primary() { public Ice.ObjectAdapter secondary() { public KernelState state() { public IModuleManagerPrx moduleManager() { public void proccess(Throwable exception) { logger.error(exception.getMessage());

public void toogle(KernelState kernelState) { if (state.getClass() != kernelState.getClass()) { for (KernelListener listener : kernelListeners) { listener.stateChanged(kernelState);

public void init() { checkKernelThread();

logger.debug("init kernel");

for (Driver drv : drivers.values()) { logger.debug("... activating " + drv.name());

moduleManager = IModuleManagerPrxHelper.checkedCast(communicator } catch (Ice.ConnectionRefusedException ex) { throw new KernelException("could not connect to module manager");

loadConfiguration();

primary.activate();

secondary.activate();

public void dispose() { checkKernelThread();

logger.debug("dispose kernel");

started = false;

for (Driver drv : drivers.values()) { logger.debug("... deactivating " + drv.name());

for (Driver drv : drivers.values()) { saveConfiguration();

primary.deactivate();

secondary.deactivate();

public void waitForTerminated() { } catch (InterruptedException ignored) { public void run() { usedFilter.getClass().getSimpleName());

state.handler().getClass().getSimpleName());

public synchronized void handle(KernelEvent event) { pool.offer(event);

public KernelEvent peek() { return pool.peek();

public Driver driver(Class clazz) { return adapters.get(clazz);

public Collection adapters() { return Collections.unmodifiableCollection(adapters.values());

public Collection listiners() { return Collections.unmodifiableCollection(kernelListeners);

public Map cache() { return cache;

public Map parents() { return parents;

public Map childs() { return childs;

private void checkKernelThread() { if (Thread.currentThread() != self) { private void initDrivers() { drivers = new HashMap();

adapters.put(.stringToIdentity(Discoverer.class.getSimpleName()), adapters.put(SessionierAdapter.class, new SessionierAdapter(identity, (Sessionier) drivers.get(Sessionier.class)));

private void initPrimaryAdapter() { primary = communicator.createObjectAdapter(Defaults.PRIMARY_ADAPTER_NAME);

primary.add((Ice.Object) adapters.get(SessionierAdapter.class), ((Adapter) adapters.get(SessionierAdapter.class)).identity());

private void initSecondaryAdapter() { secondary = communicator.createObjectAdapter(Defaults.SECONDARY_ADAPTER_NAME);

secondary.add((Ice.Object) adapters.get(DiscovererAdapter.class), ((Adapter) adapters.get(DiscovererAdapter.class)).identity());

private void initKernelListeners() { kernelListeners = new LinkedList();

for (Driver driver : drivers.values()) { if (driver instanceof KernelListener) { kernelListeners.add((KernelListener) driver);

private void initKernelFilters() { kernelFilters = new LinkedList();

kernelFilters.add(new ToogleFilter(this));

private void initKernelRate() { Hoster hoster = (Hoster) drivers.get(Hoster.class);

Map context = hoster.context();

int ram = Integer.parseInt(context.get("Ram"));

int mhz = Integer.parseInt(context.get("Mhz"));

rate = (int) (((ram * 0.5 + mhz * 0.5) / Defaults.BASELINE_RATE) * 10);

private void initSelfSession() { selfSession = IKernelSessionPrxHelper.uncheckedCast(primary().addWithUUID( new KernelSessionAdapter(new KernelSession(this))));

private void loadConfiguration() { File(properties().getProperty("Snoopy.KernelConfiguration"))));

} catch (FileNotFoundException ex) { private void saveConfiguration() { File(properties().getProperty("Snoopy.KernelConfiguration"))), "Snoopy.KernelConfiguration");

} catch (FileNotFoundException ex) { } catch (NullPointerException ex) { /** * Copyright 2011 Snoopy Project * Licensed under the Apache License, Version 2.0 (the "License");

* You may not use this file except in compliance with the License.

* You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2. * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and * limitations under the License.

package com.googlecode.snoopyd.core.state;

import com.googlecode.snoopyd.core.handler.KernelHandler;

public interface KernelState { public KernelHandler handler();

package com.googlecode.snoopyd.core.state;

public interface KernelListener { public void stateChanged(KernelState currentState);

/** * Copyright 2011 Snoopy Project * Licensed under the Apache License, Version 2.0 (the "License");

* You may not use this file except in compliance with the License.

* You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2. * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and * limitations under the License.

package com.googlecode.snoopyd.core.state;

import com.googlecode.snoopyd.core.Kernel;

import com.googlecode.snoopyd.core.handler.ActiveHandler;

import com.googlecode.snoopyd.core.handler.KernelHandler;

public class ActiveState implements KernelState { private Kernel kernel;

private KernelHandler handler;

public ActiveState(Kernel kernel) { public KernelHandler handler() { /** * Copyright 2011 Snoopy Project * Licensed under the Apache License, Version 2.0 (the "License");

* You may not use this file except in compliance with the License.

* You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2. * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and * limitations under the License.

package com.googlecode.snoopyd.core.state;

import com.googlecode.snoopyd.core.Kernel;

import com.googlecode.snoopyd.core.handler.KernelHandler;

import com.googlecode.snoopyd.core.handler.OfflineHandler;

public class OfflineState implements KernelState { private Kernel kernel;

private KernelHandler handler;

public OfflineState(Kernel kernel) { public KernelHandler handler() { /** * Copyright 2011 Snoopy Project * Licensed under the Apache License, Version 2.0 (the "License");

* You may not use this file except in compliance with the License.

* You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2. * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and * limitations under the License.

package com.googlecode.snoopyd.core.state;

import com.googlecode.snoopyd.core.Kernel;

import com.googlecode.snoopyd.core.handler.KernelHandler;

import com.googlecode.snoopyd.core.handler.OnlineHandler;

public class OnlineState implements KernelState { private Kernel kernel;

private KernelHandler handler;

public OnlineState(Kernel kernel) { public KernelHandler handler() { /** * Copyright 2011 Snoopy Project * Licensed under the Apache License, Version 2.0 (the "License");

* You may not use this file except in compliance with the License.

* You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2. * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and * limitations under the License.

package com.googlecode.snoopyd.core.state;

import com.googlecode.snoopyd.core.Kernel;

import com.googlecode.snoopyd.core.handler.KernelHandler;

import com.googlecode.snoopyd.core.handler.PassiveHandler;

public class PassiveState implements KernelState { private Kernel kernel;

private KernelHandler handler;

public PassiveState(Kernel kernel) { public KernelHandler handler() { /** * Copyright 2011 Snoopy Project * Licensed under the Apache License, Version 2.0 (the "License");

* You may not use this file except in compliance with the License.

* You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2. * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and * limitations under the License.

package com.googlecode.snoopyd.core.state;

import com.googlecode.snoopyd.core.Kernel;

import com.googlecode.snoopyd.core.handler.KernelHandler;

import com.googlecode.snoopyd.core.handler.SuspenseHandler;

public class SuspenseState implements KernelState { private Kernel kernel;

private KernelHandler handler;

public SuspenseState(Kernel kernel) { public KernelHandler handler() { /** * Copyright 2011 Snoopy Project * Licensed under the Apache License, Version 2.0 (the "License");

* You may not use this file except in compliance with the License.

* You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2. * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and * limitations under the License.

package com.googlecode.snoopyd.core.handler;

import org.apache.log4j.Logger;

import com.googlecode.snoopyd.Defaults;

import com.googlecode.snoopyd.core.Kernel;

import com.googlecode.snoopyd.core.Kernel.KernelException;

import com.googlecode.snoopyd.core.event.ChildNodeDeadedEvent;

import com.googlecode.snoopyd.core.event.ChildSessionRecivedEvent;

import com.googlecode.snoopyd.core.event.ChildSessionSendedEvent;

import com.googlecode.snoopyd.core.event.DiscoverRecivedEvent;

import com.googlecode.snoopyd.core.event.ExceptionEvent;

import com.googlecode.snoopyd.core.event.ForceStartEvent;

import com.googlecode.snoopyd.core.event.InvokationEvent;

import com.googlecode.snoopyd.core.event.KernelEvent;

import com.googlecode.snoopyd.core.event.KernelReconfiguredEvent;

import com.googlecode.snoopyd.core.event.KernelStateChangedEvent;

import com.googlecode.snoopyd.core.event.NetworkDisabledEvent;

import com.googlecode.snoopyd.core.event.NetworkEnabledEvent;

import com.googlecode.snoopyd.core.event.ParentNodeDeadedEvent;

import com.googlecode.snoopyd.core.event.ParentSessionRecivedEvent;

import com.googlecode.snoopyd.core.event.ParentSessionSendedEvent;

import com.googlecode.snoopyd.core.event.ResultRecievedEvent;

import com.googlecode.snoopyd.core.event.ScheduleTimeComeEvent;

import com.googlecode.snoopyd.core.event.ScheduleUpdatedEvent;

import com.googlecode.snoopyd.core.event.SnoopydStartedEvent;

import com.googlecode.snoopyd.core.event.SnoopydTerminatedEvent;

import com.googlecode.snoopyd.driver.ISchedulerPrx;

import com.googlecode.snoopyd.session.IKernelSessionPrx;

public

Abstract

class AbstractHandler implements KernelHandler { private static Logger logger = Logger.getLogger(AbstractHandler.class);

protected Kernel kernel;

public AbstractHandler(Kernel kernel) { public void handle(KernelEvent event) { if (event instanceof NetworkEnabledEvent) { } else if (event instanceof NetworkDisabledEvent) { } else if (event instanceof ChildSessionSendedEvent) { handle((ChildSessionSendedEvent) event);

} else if (event instanceof ChildSessionRecivedEvent) { handle((ChildSessionRecivedEvent) event);

} else if (event instanceof DiscoverRecivedEvent) { handle((DiscoverRecivedEvent) event);

} else if (event instanceof ParentNodeDeadedEvent) { handle((ParentNodeDeadedEvent) event);

} else if (event instanceof ChildNodeDeadedEvent) { handle((ChildNodeDeadedEvent) event);

} else if (event instanceof SnoopydStartedEvent) { handle((SnoopydStartedEvent) event);

} else if (event instanceof SnoopydTerminatedEvent) { handle((SnoopydTerminatedEvent) event);

} else if (event instanceof KernelStateChangedEvent) { handle((KernelStateChangedEvent) event);

} else if (event instanceof InvokationEvent) { handle((InvokationEvent) event);

} else if (event instanceof ScheduleTimeComeEvent) { handle((ScheduleTimeComeEvent) event);

} else if (event instanceof ExceptionEvent) { handle((ExceptionEvent) event);

} else if (event instanceof ScheduleUpdatedEvent) { handle((ScheduleUpdatedEvent) event);

} else if (event instanceof ParentSessionRecivedEvent) { handle((ParentSessionRecivedEvent) event);

} else if (event instanceof ParentSessionSendedEvent) { handle((ParentSessionSendedEvent) event);

} else if (event instanceof ResultRecievedEvent) { handle((ResultRecievedEvent) event);

} else if (event instanceof ForceStartEvent) { } else if (event instanceof KernelReconfiguredEvent) { handle((KernelReconfiguredEvent) event);

logger.warn("not found handler for " + event.name());

public void handle(KernelReconfiguredEvent event) { kernel.reconfigure(event.configuration());

public void handle(ForceStartEvent event) { for (Ice.Identity identity: kernel.parents().keySet()) { kernel.parents().get(identity);

ISchedulerPrx parentScheduler = parentSession.scheduler();

event.params());

public void handle(ResultRecievedEvent event) { public void handle(ScheduleUpdatedEvent event) { for (Ice.Identity identity: kernel.parents().keySet()) { kernel.parents().get(identity);

ISchedulerPrx parentScheduler = parentSession.scheduler();

parentScheduler.synchronize(kernel.identity(), kernel.self().scheduler());

public void handle(ParentSessionRecivedEvent event) { kernel.parents().put(event.identity(), event.sesssion());

public void handle(ParentSessionSendedEvent event) { public void handle(ChildSessionSendedEvent event) { public void handle(ChildSessionRecivedEvent event) { kernel.childs().put(event.identity(), event.session());

public void handle(ExceptionEvent event) { if (event.exception() instanceof KernelException) { throw (KernelException) event.exception();

kernel.proccess(event.exception());

public void handle(KernelStateChangedEvent event) { kernel.toogle(event.state());

public void handle(InvokationEvent event) { Thread thread = new Thread(event, Defaults.INVOKATION_THREAD_NAME + "-" + java.util.UUID.randomUUID().toString());

public void handle(SnoopydStartedEvent event) { public void handle(SnoopydTerminatedEvent event) { synchronized (event) { /** * Copyright 2011 Snoopy Project * Licensed under the Apache License, Version 2.0 (the "License");

* You may not use this file except in compliance with the License.

* You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2. * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and * limitations under the License.

package com.googlecode.snoopyd.core.handler;

import Ice.ConnectionRefusedException;

import com.googlecode.snoopyd.core.Kernel;

import com.googlecode.snoopyd.core.event.ChildNodeDeadedEvent;

import com.googlecode.snoopyd.core.event.DiscoverRecivedEvent;

import com.googlecode.snoopyd.core.event.InvokationEvent;

import com.googlecode.snoopyd.core.event.KernelStateChangedEvent;

import com.googlecode.snoopyd.core.event.NetworkDisabledEvent;

import com.googlecode.snoopyd.core.event.NetworkEnabledEvent;

import com.googlecode.snoopyd.core.event.ParentNodeDeadedEvent;

import com.googlecode.snoopyd.core.event.ResultRecievedEvent;

import com.googlecode.snoopyd.core.event.ScheduleTimeComeEvent;

import com.googlecode.snoopyd.core.state.OfflineState;

import com.googlecode.snoopyd.core.state.OnlineState;

import com.googlecode.snoopyd.driver.IModulerPrx;

import com.googlecode.snoopyd.driver.ISessionierPrx;

import com.googlecode.snoopyd.driver.ISessionierPrxHelper;

import com.googlecode.snoopyd.driver.Resulter;

import com.googlecode.snoopyd.driver.Scheduler;

import com.googlecode.snoopyd.session.IKernelSessionPrx;

import com.googlecode.snoopyd.session.IKernelSessionPrxHelper;

import com.googlecode.snoopyd.session.KernelSession;

import com.googlecode.snoopyd.session.KernelSessionAdapter;

import com.googlecode.snoopyd.util.Identities;

public class ActiveHandler extends AbstractHandler implements KernelHandler { public ActiveHandler(Kernel kernel) { public void handle(NetworkEnabledEvent event) { public void handle(NetworkDisabledEvent event) { String proxy = Identities.toString(kernel.identity()) + ": " ISessionierPrx prx = ISessionierPrxHelper.checkedCast(kernel IKernelSessionPrx selfSession = IKernelSessionPrxHelper KernelSession(kernel))));

IKernelSessionPrx remoteSession = prx.createKernelSession( kernel.parents().put(kernel.identity(), remoteSession);

kernel.handle(new KernelStateChangedEvent(new OfflineState(kernel)));

public void handle(DiscoverRecivedEvent event) { kernel.cache().put(event.identity(), event.context());

public void handle(ParentNodeDeadedEvent event) { kernel.cache().clear();

kernel.parents().remove(event.identity());

kernel.handle(new KernelStateChangedEvent(new OnlineState(kernel)));

public void handle(ChildNodeDeadedEvent event) { kernel.childs().remove(event.identity());

Scheduler scheduler = (Scheduler) kernel.driver(Scheduler.class);

scheduler.cancel(event.identity());

public void handle(ScheduleTimeComeEvent event) { final ScheduleTimeComeEvent fevent = event;

kernel.handle(new InvokationEvent() { result));

(com.googlecode.snoopyd.driver.ModuleNotFoundException ex) { manager")));

public void handle(ResultRecievedEvent event) { Resulter resulter = (Resulter) kernel.driver(Resulter.class);

String hostname = kernel.cache().get(event.identity()).get("hostname");

String osname = kernel.cache().get(event.identity()).get("os");

IKernelSessionPrx remoteSession = (IKernelSessionPrx) kernel.childs() String module = remoteSession.moduler().fetch().get(event.muid());

resulter.store(hostname, osname, module, event.result());

/** * Copyright 2011 Snoopy Project * Licensed under the Apache License, Version 2.0 (the "License");

* You may not use this file except in compliance with the License.

* You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2. * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and * limitations under the License.

package com.googlecode.snoopyd.core.handler;

import com.googlecode.snoopyd.core.event.ChildNodeDeadedEvent;

import com.googlecode.snoopyd.core.event.ChildSessionRecivedEvent;

import com.googlecode.snoopyd.core.event.ChildSessionSendedEvent;

import com.googlecode.snoopyd.core.event.DiscoverRecivedEvent;

import com.googlecode.snoopyd.core.event.ExceptionEvent;

import com.googlecode.snoopyd.core.event.ForceStartEvent;

import com.googlecode.snoopyd.core.event.InvokationEvent;

import com.googlecode.snoopyd.core.event.KernelEvent;

import com.googlecode.snoopyd.core.event.KernelReconfiguredEvent;

import com.googlecode.snoopyd.core.event.KernelStateChangedEvent;

import com.googlecode.snoopyd.core.event.NetworkDisabledEvent;

import com.googlecode.snoopyd.core.event.NetworkEnabledEvent;

import com.googlecode.snoopyd.core.event.ParentNodeDeadedEvent;

import com.googlecode.snoopyd.core.event.ParentSessionRecivedEvent;

import com.googlecode.snoopyd.core.event.ParentSessionSendedEvent;

import com.googlecode.snoopyd.core.event.ResultRecievedEvent;

import com.googlecode.snoopyd.core.event.ScheduleTimeComeEvent;

import com.googlecode.snoopyd.core.event.ScheduleUpdatedEvent;

import com.googlecode.snoopyd.core.event.SnoopydStartedEvent;

import com.googlecode.snoopyd.core.event.SnoopydTerminatedEvent;

public interface KernelHandler { public void handle(KernelEvent event);

public void handle(NetworkEnabledEvent event);

public void handle(NetworkDisabledEvent event);

public void handle(ChildSessionSendedEvent event);

public void handle(ChildSessionRecivedEvent event);

public void handle(DiscoverRecivedEvent event);

public void handle(ParentNodeDeadedEvent event);

public void handle(ChildNodeDeadedEvent event);

public void handle(SnoopydStartedEvent event);

public void handle(SnoopydTerminatedEvent event);

public void handle(KernelStateChangedEvent event);

public void handle(InvokationEvent event);

public void handle(ScheduleTimeComeEvent event);

public void handle(ExceptionEvent event);

public void handle(ScheduleUpdatedEvent event);

public void handle(ParentSessionRecivedEvent event);

public void handle(ParentSessionSendedEvent event);

public void handle(ResultRecievedEvent event);

public void handle(ForceStartEvent event);

public void handle(KernelReconfiguredEvent event);

/** * Copyright 2011 Snoopy Project * Licensed under the Apache License, Version 2.0 (the "License");

* You may not use this file except in compliance with the License.

* You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2. * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and * limitations under the License.

package com.googlecode.snoopyd.core.handler;

import com.googlecode.snoopyd.core.Kernel;

import com.googlecode.snoopyd.core.event.ChildNodeDeadedEvent;

import com.googlecode.snoopyd.core.event.DiscoverRecivedEvent;

import com.googlecode.snoopyd.core.event.KernelStateChangedEvent;

import com.googlecode.snoopyd.core.event.NetworkDisabledEvent;

import com.googlecode.snoopyd.core.event.NetworkEnabledEvent;

import com.googlecode.snoopyd.core.event.ParentNodeDeadedEvent;

import com.googlecode.snoopyd.core.event.ScheduleTimeComeEvent;

import com.googlecode.snoopyd.core.state.OnlineState;

public class OfflineHandler extends AbstractHandler implements public OfflineHandler(Kernel kernel) { public void handle(NetworkEnabledEvent event) { kernel.handle(new KernelStateChangedEvent(new OnlineState(kernel)));

public void handle(NetworkDisabledEvent event) { public void handle(DiscoverRecivedEvent event) { public void handle(ParentNodeDeadedEvent event) { public void handle(ScheduleTimeComeEvent event) { public void handle(ChildNodeDeadedEvent event) { /** * Copyright 2011 Snoopy Project * Licensed under the Apache License, Version 2.0 (the "License");

* You may not use this file except in compliance with the License.

* You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2. * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and * limitations under the License.

package com.googlecode.snoopyd.core.handler;

import java.util.HashMap;

import java.util.Map;

import com.googlecode.snoopyd.Defaults;

import com.googlecode.snoopyd.core.Kernel;

import com.googlecode.snoopyd.core.event.ChildNodeDeadedEvent;

import com.googlecode.snoopyd.core.event.ChildSessionSendedEvent;

import com.googlecode.snoopyd.core.event.DiscoverRecivedEvent;

import com.googlecode.snoopyd.core.event.KernelStateChangedEvent;

import com.googlecode.snoopyd.core.event.NetworkDisabledEvent;

import com.googlecode.snoopyd.core.event.NetworkEnabledEvent;

import com.googlecode.snoopyd.core.event.ParentNodeDeadedEvent;

import com.googlecode.snoopyd.core.event.ParentSessionRecivedEvent;

import com.googlecode.snoopyd.core.event.ParentSessionSendedEvent;

import com.googlecode.snoopyd.core.event.ScheduleTimeComeEvent;

import com.googlecode.snoopyd.core.event.ScheduleUpdatedEvent;

import com.googlecode.snoopyd.core.state.ActiveState;

import com.googlecode.snoopyd.core.state.OfflineState;

import com.googlecode.snoopyd.core.state.PassiveState;

import com.googlecode.snoopyd.driver.ISessionierPrx;

import com.googlecode.snoopyd.driver.ISessionierPrxHelper;

import com.googlecode.snoopyd.session.IKernelSessionPrx;

import com.googlecode.snoopyd.session.IKernelSessionPrxHelper;

import com.googlecode.snoopyd.session.KernelSession;

import com.googlecode.snoopyd.session.KernelSessionAdapter;

import com.googlecode.snoopyd.util.Identities;

public class OnlineHandler extends AbstractHandler implements KernelHandler { private long startTimeStamp;

private boolean connected;

public OnlineHandler(Kernel kernel) { this.leaders = new HashMap();

this.leaders.put(kernel.identity(), kernel.rate());

this.startTimeStamp = System.currentTimeMillis();

public void handle(NetworkEnabledEvent event) { public void handle(NetworkDisabledEvent event) { kernel.childs().clear();

kernel.parents().clear();

kernel.handle(new KernelStateChangedEvent(new OfflineState(kernel)));

public void handle(DiscoverRecivedEvent event) { kernel.cache().put(event.identity(), event.context());

Ice.Identity eventIdentity = event.identity();

int eventRate = Integer.parseInt(event.context().get("rate"));

leaders.put(eventIdentity, eventRate);

Defaults.DISCOVER_TIMEOUT) {.checkedCast(kernel.communicator().stringToProxy( KernelSession( ParentSessionRecivedEvent(leaderIdentity, public void handle(ParentNodeDeadedEvent event) { public void handle(ChildNodeDeadedEvent event) { public void handle(ScheduleTimeComeEvent event) { public void handle(ParentSessionRecivedEvent event) { if (event.identity().equals(kernel.identity())) { kernel.handle(new KernelStateChangedEvent(new ActiveState(kernel)));

kernel.handle(new KernelStateChangedEvent(new PassiveState(kernel)));

kernel.handle(new ScheduleUpdatedEvent());

/** * Copyright 2011 Snoopy Project * Licensed under the Apache License, Version 2.0 (the "License");

* You may not use this file except in compliance with the License.

* You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2. * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and * limitations under the License.

package com.googlecode.snoopyd.core.handler;

import com.googlecode.snoopyd.core.Kernel;

import com.googlecode.snoopyd.core.event.ChildNodeDeadedEvent;

import com.googlecode.snoopyd.core.event.DiscoverRecivedEvent;

import com.googlecode.snoopyd.core.event.KernelStateChangedEvent;

import com.googlecode.snoopyd.core.event.NetworkDisabledEvent;

import com.googlecode.snoopyd.core.event.NetworkEnabledEvent;

import com.googlecode.snoopyd.core.event.ParentNodeDeadedEvent;

import com.googlecode.snoopyd.core.event.ParentSessionRecivedEvent;

import com.googlecode.snoopyd.core.event.ParentSessionSendedEvent;

import com.googlecode.snoopyd.core.event.ScheduleTimeComeEvent;

import com.googlecode.snoopyd.core.state.ActiveState;

import com.googlecode.snoopyd.core.state.OfflineState;

import com.googlecode.snoopyd.core.state.OnlineState;

import com.googlecode.snoopyd.driver.ISessionierPrx;

import com.googlecode.snoopyd.driver.ISessionierPrxHelper;

import com.googlecode.snoopyd.session.IKernelSessionPrx;

import com.googlecode.snoopyd.session.IKernelSessionPrxHelper;

import com.googlecode.snoopyd.session.KernelSession;

import com.googlecode.snoopyd.session.KernelSessionAdapter;

import com.googlecode.snoopyd.util.Identities;

public class PassiveHandler extends AbstractHandler implements KernelHandler { public PassiveHandler(Kernel kernel) { public void handle(NetworkEnabledEvent event) { public void handle(NetworkDisabledEvent event) { kernel.parents().clear();

String proxy = Identities.toString(kernel.identity()) + ": " ISessionierPrx prx = ISessionierPrxHelper.checkedCast(kernel IKernelSessionPrx selfSession = IKernelSessionPrxHelper KernelSession(kernel))));

IKernelSessionPrx remoteSession = prx.createKernelSession( kernel.parents().put(kernel.identity(), remoteSession);

kernel.handle(new KernelStateChangedEvent(new OfflineState(kernel)));

public void handle(DiscoverRecivedEvent event) { kernel.cache().put(event.identity(), event.context());

public void handle(ParentSessionRecivedEvent event) { public void handle(ParentSessionSendedEvent event) { kernel.handle(new KernelStateChangedEvent(new ActiveState(kernel)));

public void handle(ParentNodeDeadedEvent event) { kernel.cache().clear();

kernel.parents().remove(event.identity());

kernel.handle(new KernelStateChangedEvent(new OnlineState(kernel)));

public void handle(ChildNodeDeadedEvent event) { public void handle(ScheduleTimeComeEvent event) { /** * Copyright 2011 Snoopy Project * Licensed under the Apache License, Version 2.0 (the "License");

* You may not use this file except in compliance with the License.

* You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2. * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and * limitations under the License.

package com.googlecode.snoopyd.core.handler;

import com.googlecode.snoopyd.core.Kernel;

import com.googlecode.snoopyd.core.event.ChildNodeDeadedEvent;

import com.googlecode.snoopyd.core.event.ChildSessionRecivedEvent;

import com.googlecode.snoopyd.core.event.ChildSessionSendedEvent;

import com.googlecode.snoopyd.core.event.DiscoverRecivedEvent;

import com.googlecode.snoopyd.core.event.KernelStateChangedEvent;

import com.googlecode.snoopyd.core.event.NetworkDisabledEvent;

import com.googlecode.snoopyd.core.event.NetworkEnabledEvent;

import com.googlecode.snoopyd.core.event.ParentNodeDeadedEvent;

import com.googlecode.snoopyd.core.event.ScheduleTimeComeEvent;

import com.googlecode.snoopyd.core.state.OfflineState;

import com.googlecode.snoopyd.core.state.OnlineState;

import com.googlecode.snoopyd.driver.ISessionierPrx;

import com.googlecode.snoopyd.driver.ISessionierPrxHelper;

import com.googlecode.snoopyd.session.IKernelSessionPrx;

import com.googlecode.snoopyd.session.IKernelSessionPrxHelper;

import com.googlecode.snoopyd.session.KernelSession;

import com.googlecode.snoopyd.session.KernelSessionAdapter;

import com.googlecode.snoopyd.util.Identities;

public class SuspenseHandler extends AbstractHandler implements KernelHandler { public static final int TRYS = 3;

public static final int SLEEP = 10000;

public SuspenseHandler(Kernel kernel) { public void handle(NetworkEnabledEvent event) { kernel.handle(new KernelStateChangedEvent(new OnlineState(kernel)));

public void handle(NetworkDisabledEvent event) { String proxy = Identities.toString(kernel.identity()) + ": " ISessionierPrx prx = ISessionierPrxHelper.checkedCast(kernel IKernelSessionPrx selfSession = IKernelSessionPrxHelper KernelSession(kernel))));

IKernelSessionPrx remoteSession = prx.createKernelSession( kernel.parents().put(kernel.identity(), remoteSession);

kernel.handle(new KernelStateChangedEvent(new OfflineState(kernel)));

public void handle(ChildSessionSendedEvent event) { public void handle(ChildSessionRecivedEvent event) { kernel.childs().put(event.identity(), event.session());

public void handle(DiscoverRecivedEvent event) { public void handle(ParentNodeDeadedEvent event) { public void handle(ChildNodeDeadedEvent event) { public void handle(ScheduleTimeComeEvent event) { /** * Copyright 2011 Snoopy Project * Licensed under the Apache License, Version 2.0 (the "License");

* You may not use this file except in compliance with the License.



Pages:     | 1 || 3 | 4 |   ...   | 5 |


Похожие работы:

«Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТУРИЗМА И СЕРВИСА Филиал в г. Смоленске Кафедра туризма и сервиса ДИПЛОМНАЯ РАБОТА на тему: Использование видов и различных по значимости групп объектов-ресурсов социально-культурных турресурсов при формировании религиозных туров на Витебщине по специальности: 100103.65 Социально-культурный сервис и...»

«  МИНИСТЕРСТВО СЕЛЬСКОГО ХОЗЯЙСТВА РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Саратовский государственный аграрный университет имени Н.И. Вавилова РАБОЧАЯ ПРОГРАММА ДИСЦИПЛИНЫ (МОДУЛЯ) Дисциплина ПОЖАРНАЯ ТАКТИКА Направление 280705.65 Пожарная безопасность подготовки Специализация Природные пожары и борьба с ними Квалификация (степень) специалист выпускника Нормативный срок 5 лет обучения Форма обучения Очная...»

«Министерство образования и науки Российской Федерации Федерально государственное бюджетное образовательное учреждение высшего профессионального образования Уральский государственный лесотехнический университет Кафедра ХИМИЯ ДРЕВЕСИНЫ И ТЕХНОЛОГИИ ЦЕЛЛЮЛОЗНО-БУМАЖНЫХ ПРОИЗВОДСТВ Утверждаю. Одобрена: Директор ИХПРС и ПЭ кафедрой ХД и ТЦБП А.В. Вураско Протокол №_ от 2014 г. _ 2014 г. Зав. кафедрой А.В. Вураско Методической комиссией ИХПРС и ПЭ Протокол № от _2014 г. Председатель Первова И.Г....»

«Государственное образовательное учреждение высшего профессионального образования Липецкий государственный технический университет УТВЕРЖДАЮ Декан факультета _ С.А. Ляпин 2011г. РАБОЧАЯ ПРОГРАММА ДИСЦИПЛИНЫ (МОДУЛЯ) Технологические процессы технического обслуживания и ремонта ТиТТМО (наименование дисциплины (модуля) Направление подготовки 190600.62 Эксплуатация транспортнотехнологических машин и комплексов Профиль подготовки Автомобильный сервис Квалификация (степень) выпускника бакалавр_...»

«БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ Экономический факультет Кафедра теоретической и институциональной экономики Серия ИНСТИТУЦИОНАЛЬНАЯ ЭКОНОМИКА П.С. Лемещенко ИНСТИТУЦИОНАЛЬНАЯ ЭКОНОМИКА – 2 Учебная программа для студентов старших курсов, магистров экономических специальностей Минск 2008 2 Цель курса состоит в том, чтобы углубить понимание инструментов, методов и категорий институциональной экономики, доведя до частных прикладных исследований. Экономика представляет определенный набор...»

«Программно-методическое обеспечение основного общего, среднего (полного) общего образования. УЧЕБНЫЕ ПРОГРАММЫ ПО ПРЕДМЕТАМ Основное (общее), среднее(полное) образование Т.А.Ладыженская, Русский язык 5 класс, Москва, Просвещение. Русский язык 2008г. М.Т.Баранов, Русский язык 6 класс, Москва, Просвещение, 2008 г. М.Т.Баранов, Т.А.Ладыженская, Л.А.Тростенцова, Русский язык 7 класс, Москва, Просвещение, 2008 г. Т.А. Ладыженская, Л.А.,Тростенцова, Русский язык 8 класс, Москва, Просвещение, 2008...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ КЫРГЫЗСКОЙ РЕСПУБЛИКИ ОШСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ МЕДИЦИНСКИЙ ФАКУЛЬТЕТ Кафедра нормальной и топографической анатомии человека Утверждено_ на заседании кафедры нормальной и топографической анатомии человека от _ 2013 г. зав. каф., доцент К. Сакибаев РАБОЧАЯ ПРОГРАММА По дисциплине: топографическая анатомия для студентов очного отделения обучающихся по специальностям: 560001 – лечебное дело, 560002 – педиатрия Сетка часов по учебному плану: Количество...»

«Александр Крымов Вы — управляющий персоналом Аннотация ЭТО НЕ УЧЕБНИК! Учебников и пособий по теме управления персоналом, как переводных, так и родных (нередко скомпилированных из тех же переводных), в книжных магазинах вполне достаточно. А если вы уже успели где-то поучиться нашему ремеслу, то наверняка и учебники читали. В этой книге вы найдете не то, что принято писать про управление персоналом, а то, с чем чаще всего приходится сталкиваться в реальной практической работе в нашей стране в...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ ХАБАРОВСКОГО КРАЯ КРАЕВОЕ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ НАЧАЛЬНОГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ ПРОФЕССИОНАЛЬНОЕ УЧИЛИЩЕ № 6 РАБОЧАЯ ПРОГРАММА УЧЕБНОЙ ДИСЦИПЛИНЫ ОП 02. МАТЕРИАЛОВЕДЕНИЕ 2011 г 1 Рабочая программа учебной дисциплины разработана на основе Федерального государственного образовательного стандарта (далее – ФГОС) по профессии начального профессионального образования (далее НПО) 270802.08 Мастер сухого строительства...»

«РАБОЧАЯ ПРОГРАММА ПО КУРСУ ЕСТЕСТВОЗНАНИЕ ДЛЯ 10 -11 КЛАССОВ ОБЩЕОБРАЗОВАТЕЛЬНЫХ УЧРЕЖДЕНИЙ Авторы: И. Ю. Алексашина, К. В. Галактионов, И. С. Дмитриев, А. В. Ляпцев, И. И. Соколова ПОЯСНИТЕЛЬНАЯ ЗАПИСКА Целевые установки В соответствии с концепцией профильного обучения естественно-научные дисциплины занимают важное место в ряду предметов общекультурной направленности, обязательных для освоения на базовом уровне в старшей школе. Согласно Государственному стандарту среднего (полного) общего...»

«ГБОУ гимназии № 1554 Программно-методическое обеспечение образовательного процесса на 2014-2015учебный год Основная и старшая школа. Предмет Класс Программа Автор учебника, Место издания, название учебника, издательство, класс год издания учебной литературы Русский язык 5г Государственная С.И.Львова, В.В.Львов. М.: Мнемозина, 2014г. Львова С.И., Львов В.В. Русский язык, 5 класс 5д Государственная С.И.Львова, В.В.Львов. М.: Мнемозина, 2014г. Львова С.И., Львов В.В. Русский язык, 5 класс 5е...»

«1 2 3 1. ЦЕЛИ УЧЕБНОЙ ПРОГРАММЫ ПОДГОТОВКИ: - регламентировать цели и ожидаемые результаты подготовки специалиста по специальности 190401 Эксплуатация железных дорог; - определять содержание образовательного процесса; - обеспечить реализацию образовательного процесса по подготовке специалиста по специальности 190401 Эксплуатация железных дорог. 2. ВИДЫ И ЗАДАЧИ ПРОФЕССИОНАЛЬНОЙ ДЕЯТЕЛЬНОСТИ ВЫПУСКНИКА 2.1. Виды профессиональной деятельности по специальности 190401 Эксплуатация железных дорог: -...»

«ОСНОВНЫЕ ИТОГИ НАУЧНО-ОРГАНИЗАЦИОННОЙ ДЕЯТЕЛЬНОСТИ КОЛЬСКОГО НАУЧНОГО ЦЕНТРА РАН В 2013 ГОДУ В сфере организации научных исследований основной задачей являлось обеспечение оптимальных условий для выполнения плановых заданий по 96 базовым проектам, реализованных в рамках утвержденной Правительством Российской Федерации Программы фундаментальных исследований государственных академий наук, по 36 проектам в рамках проблемно-ориентированных программ Президиума и Отделений РАН, а также по 21 заданию...»

«Министерство образования и наук и РФ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Российский государственный торгово-экономический университет Кемеровский институт (филиал) III Международная научно-методическая конференция ВЫСШЕЕ ПРОФЕССИОНАЛЬНОЕ ОБРАЗОВАНИЕ: ТРАДИЦИИ И ИННОВАЦИИ Программа конференции (25 апреля 2012 г.) Кемерово Оргкомитет конференции Председатель: Клещевский Ю.Н. – директор Кемеровского института (филиала) Российского...»

«Международный Совет по зерну Конференция МСЗ по зерну 2009 года Мировой экономический кризис: каковы последствия для рынка зерна и маслосемян? вторник 9 июня 2009 КОНФЕРЕНЦ-ЦЕНТР КОРОЛЕВЫ ЕЛИЗАВЕТЫ II ЛОНДОН SW1 АНГЛИЯ Среди спонсоров и экспонентов конференции International Grains Council, 1 Canada Square, Canary Wharf, London, E14 5AE, England TELEPHONE +44 (0) 20 7513 1122 FAX +44 (0) 20 7513 0630 EMAIL [email protected] WEBSITE www.igc.org.uk Конференция МСЗ по зерну 2009 года Мировой...»

«Книга Секреты исцеляющих программ Практическое руководство по аудиотрансу, самогипнозу, гипнотерапии Издание второе, переработанное и дополненное Эдуард Михайлович Каструбин СЕКРЕТЫ ИСЦЕЛЯЮЩИХ ПРОГРАММ Практическое руководство по аудиотрансу, самогипнозу, гипнотерапии. Издание второе, переработанное и дополненное. - М.: Деловой мир 2000, 2004. - 352с. ISBN 5-93681-006-2 Секреты исцеляющих программ сочетают в себе достижения современной гипнотерапии с уникальными знаниями древних цивилизаций...»

«Межведомственное взаимодействие и координации учреждений различной ведомственной принадлежности в исследовательской и проектной работе в системе ДОД; межрегиональный и международный опыт развития программ научно-практического образования детей Леонтович А.В., Директор Дома научно-технического творчества молодежи (филиал МГДД(Ю)Т), канд. псх. наук Вызовы образованию в современном обществе • Образование – сфера рыночных услуг, а не механизм воспроизводства культуры; • Главная задача образования –...»

«МИНОБРНАУКИ РОССИИ Егорьевский технологический институт (филиал) федерального государственного бюджетного образовательного учреждения высшего профессионального образования Московский государственный технологический университет СТАНКИН (ЕТИ ФГБОУ ВПО МГТУ СТАНКИН) УТВЕРЖДАЮ Ректор ФГБОУ ВПО МГТУ СТАНКИН д.т.н., проф. _ С.Н. Григорьев 2013 ОСНОВНАЯ ОБРАЗОВАТЕЛЬНАЯ ПРОГРАММА ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ Направление подготовки 151900 КОНСТРУКТОРСКО-ТЕХНОЛОГИЧЕСКОЕ ОБЕСПЕЧЕНИЕ...»

«ТРАДИЦИОННАЯ КУЛЬТУРА И БУДДИЗМ В САМОИДЕНТИФИКАЦИИ БУРЯТ Т.Д. Скрынникова Данная работа направлена на выявление и осмысление природы и механизмов действия системы самоидентификации в бурятском обществе рубежа ХХ–ХХI вв. и роли религиозного фактора в этом процессе. В данной статье не будут рассматриваться проблемы, связанные с этатизацией этничности, а будет выявлен лишь тот круг вопросов, который связан с определением места культуры и религии в дискурсе самоидентификации бурят и их...»

«Рабочая программа учебной дисциплины разработана на основе Федерального государственного образовательного стандарта (далее — ФГОС) по специальности среднего профессионального образования (далее — СПО) 190701 Организация перевозок и управление на транспорте ( по видам) и на основе примерной программы учебной дисциплины ФИЗИЧЕСКАЯ КУЛЬТУРА, разработанной Федеральным государственным образовательным учреждением Учебно-методический центр по образованию на железнодорожном транспорте, 2011 г., г....»






 
2014 www.av.disus.ru - «Бесплатная электронная библиотека - Авторефераты, Диссертации, Монографии, Программы»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.