Диплом: Автоматизация управления серверными приложениями в ООО «Норс Студиос»

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
97
ЗАКЛЮЧЕНИЕ
В результате выполнения поставленной в рамках данного дипломного
проекта задачи был спроектирован и реализован программный продукт,
позволяющий оптимально осуществлять администрирование серверных
приложений в компании «North Studios», получивший название «Coman».
В процессе разработки были поставлены и достигнуты следующие цели:
интерфейс выполнен в темных тонах;
бесшовное переключение между множеством серверов,
позволяющее управлять этими серверами из одного места;
отслеживание состояний и сбор телеметрических данных в
отношении серверов;
обмен данными с серверами;
работа с файловым окружением серверов;
ведение различных логов(журналов) модулей и операций системы;
реализован планировщик задач;
реализовано управление группами, цепочками и задачами
планировщика;
реализовано управление пользователями;
В ходе реализации была проделана работа по обеспечению безопасности
и безотказной работы системы и её модулей. Были разработаны методы работы
с файловым окружением сервера и реализованы методы разграничения доступа.
Были реализованы алгоритмы работы планировщика и цепочек команд. В
дополнение функционал «Coman» позволил заменить собой менеджер
развертывая сред тестирования(контейнеров).
Разработанный проект автоматизации успешно прошел тестирование и
на текущий момент используется в организации в пилотном режиме. По
данным компании сотрудники отдела отмечают быстроту и удобство в работе с
новой системой вследствие снижения нагрузки на персонал, а руководство
отмечает повышение эффективности работы отдела администрирования.
98
Основываясь на вышесказанном можно утверждать, что разработанная
система выполняет поставленные перед ней задачи в полном объеме и уже
менее чем через год окупит себя и начнет приносить компании доход.
99
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
1. Язык программирования C#. 4-е изд. Хейлсберг А., Торгерсен М.,
Вилтамут С., Голд П. 2012
2. Савинов П. PHP: Правильный путь. 2012
3. Базы данных: Учебный курс. Глушаков С.В, 2013
4. Методология функционального моделирования IDEF0, Руководящий
документ, Госстандарт России
5. Dark mode is easier on your eyes - and battery; режим доступа:
https://www.popsci.com/night-dark-mode-design/
6. Windows Sockets Error Codes; режим доступа:
https://docs.microsoft.com/en-us/windows/win32/winsock/windows-sockets-
error-codes-2
7. INI file format; режим доступа: https://en.wikipedia.org/wiki/INI_file
8. Передача аргументов запуска (на примере Word); режим доступа
https://support.microsoft.com/ru-ru/help/210565/how-to-use-startup-command-
line-switches-to-start-word-2010-word-2007
9. МОДЕЛЬ «СУЩНОСТЬ – СВЯЗЬ», В.Ю. Кара-Ушанов, 2017; режим
доступа http://study.urfu.ru/Aid/Publication/13604/1/Kara-Ushanov.pdf
10. Notation IDEF1X; режим доступа https://www.idef.com/idef1x-data-
modeling-method/
11. Byte Type; режим доступа: https://docs.microsoft.com/en-
us/dotnet/api/system.byte?view=netframework-4.5
12. Byte in Java; режим доступа:
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
13. Signedness; режим доступа: https://en.wikipedia.org/wiki/Signedness
14. Oracle Software; режим доступа:
https://www.oracle.com/products/software.html
15. Inter Process Communication (IPC); режим доступа
https://docs.microsoft.com/windows/desktop/ipc/interprocess-communications
100
16. Class Mutex in .NET / Мьютекс в .NET; режим доступа
https://docs.microsoft.com/en-
us/dotnet/api/system.threading.mutex?view=netframework-4.5
17. Docker; режим доступа: https://en.wikipedia.org/wiki/Docker_(software)
18. MySQL Docs; режим доступа: https://dev.mysql.com/doc/refman/
19. SaaS(Software as a service); режим доступа:
https://en.wikipedia.org/wiki/Software_as_a_service
101
ПРИЛОЖЕНИЯ
Приложение 1. Сценарии диалога дополнительных окон
Окно списка групп
Список групп
Кнопка
Добавить группу
Контекстное
меню 5
Сценарий диалога окна «Список групп»
Окно авторизации
Поле ввода логина
Поле ввода пароля
Кнопка Авторизация
Сценарий диалога окна «Авторизация»
102
Окно добавления/
редактирования
задачи
Поле выбора группы
серверов
Поле выбора
сервера
Поле выбора типа
триггера
Группа параметров
задачи
Поле ввода действия
задачи
Кнопка Сохранить
Кнопка ОтменаПоле ввода триггера
Сценарий диалога «Добавление/редактирование задачи»
Окно добавления/
редактирования
группы серверов
Поле ввода имени
группы
Поле ввода описания
Поле ввода команды
запуска
Поле ввода команды
остановки
Поле ввода команды
перезапуска
Кнопка Сохранить
Кнопка Отмена
Сценарий диалога «Добавление/редактирование групп серверов»
103
Область добавления/
редактирования
цепочки
Поля ввода команды
Поля ввода условия
Поле ввода имени
цепочки
Группа параметров
цепочки
Кнопка Сохранить
Кнопка Отмена
Кнопка Выполнить
Сценарий диалога «Добавление/редактирование цепочек»
104
Приложение 2. Листинг фрагмента программного кода
//
// Copyright 2020 © North Studios AB
// This file is part of Coman™.
// All rights reserved. Unauthorized copying of this file, via any medium
is strictly prohibited
// Proprietary and confidential
// Written by: Valery Grinko
//
class SAC_Manager
{
public readonly static string accessName = null;
private string CentralSockPort;
private string CentralSockAddr;
//private string CentralPipeName;
//private string CentralAddress;
private List SACs_Entities;
public delegate void TerminationHandler(Process sac, string sid,
EventArgs e);
public SAC_Manager()
{
bool isFirst = false;
Mutex mainAppMutex = new Mutex(true, accessName, out
isFirst);
if (!isFirst) return;
try { this.Run(); } finally { mainAppMutex.ReleaseMutex(); }
}
protected void Run()
{
SACs_Entities = new List<SACEntity>();
readConfig(); SACEntity.UnexpectedTermination += termHandler;
Console.WriteLine("Config read completed, {0} server(s)
found", SACs_Entities.Count);
#if !DEBUG
for (int i = SACs_Entities.Count; i-- > 0; )
SACs_Entities[i].Launch(null);
#endif
string cmd = null;
while (true)
{
cmd = Console.ReadLine();
if (cmd.Equals("reload",
StringComparison.OrdinalIgnoreCase)) { readConfig(); continue; }
105
if (cmd.Equals("version",
StringComparison.OrdinalIgnoreCase)) { Console.WriteLine("Util module
v{0}",
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version);
continue; }
if (cmd.Equals("stop",
StringComparison.OrdinalIgnoreCase)) break;
if (cmd.Equals("help",
StringComparison.OrdinalIgnoreCase)) {
Console.WriteLine(" reload - re-read config and apply
SAC params\r\n version - display this module version\r\n stop - stop all
SACs and their apps, then this module");
continue; }
}
#if !DEBUG
for (int i = SACs_Entities.Count; i-- > 0; ) {
SACs_Entities[i].Stop(); SACs_Entities[i] = null; }
#endif
SACs_Entities.Clear();
SACEntity.CentralSockAddr = this.CentralSockAddr = null;
SACEntity.CentralSockPort = this.CentralSockPort = null;
SACEntity.UnexpectedTermination -= termHandler;
}
protected void readConfig()
{
string[] cfg_data = File.ReadAllLines("sac_cfg.ini");
string sids = "\0";
string sid = null;
string name = null;
string sockPort = null;
string rootPath = null;
string mainFile = null;
string sockAddr = null;
//string pipeName = null;
//string address = null;
int pos = 0, prms = 0;
bool forceUpd = false;
bool isNew = (SACs_Entities.Count == 0);
for (int i = 0; i < cfg_data.Length; i++)
{
if (cfg_data[i].Length < 1) continue;
if (cfg_data[i][0] == '#') continue;
if (cfg_data[i][0] == '[' && (pos =
cfg_data[i].IndexOf(']')) > 1)
{
if (sid != null) //check if we have another server
config
106
{
if (sid.Equals("central",
StringComparison.OrdinalIgnoreCase) && sockPort != null && sockAddr !=
null &&
(!sockPort.Equals(SACEntity.CentralSockPort)
|| !sockAddr.Equals(SACEntity.CentralSockAddr)))
{
SACEntity.CentralSockPort =
this.CentralSockPort = sockPort;
SACEntity.CentralSockAddr =
this.CentralSockAddr = sockAddr;
forceUpd = true;
}
else if (prms == 4) //if server config have all
required params
{
if (isNew) { SACs_Entities.Add(new
SACEntity(sid, name, sockPort, rootPath, mainFile)); }
else {
int j = 0;
for (; j < SACs_Entities.Count; j++) if
(SACs_Entities[j].ServerID.Equals(sid)) { break; }
if (j < SACs_Entities.Count)
SACs_Entities[j].Update(name, sockPort, rootPath, mainFile, forceUpd);
else SACs_Entities.Add(new SACEntity(sid,
name, sockPort, rootPath, mainFile));
}
}
sids = sids + sid + '\0'; prms = 0;
name = sockPort = rootPath = mainFile = sockAddr
= null;
}
sid = cfg_data[i].Substring(1, pos - 1);
if (sids.IndexOf(('\0' + sid + '\0'),
StringComparison.OrdinalIgnoreCase) >= 0) sid = null; //duplicated server
ID
continue;
}
if (sid == null) continue; //skip until sid found
if (name == null && cfg_data[i].StartsWith("Name=")) {
name = cfg_data[i].Substring(5); prms++; continue; }
if (sockPort == null &&
cfg_data[i].StartsWith("SockPort=")) { sockPort =
cfg_data[i].Substring(9); prms++; continue; }
if (rootPath == null &&
cfg_data[i].StartsWith("RootPath=")) { rootPath =
cfg_data[i].Substring(9); prms++; continue; }
if (mainFile == null &&
cfg_data[i].StartsWith("MainFile=")) { mainFile =
cfg_data[i].Substring(9); prms++; continue; }

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
«Управление ресурсами проекта» (на примере организации ООО «ЛАКОСТЭ»)
Agile-методология в управлении проектами на примере ООО «Ресурсный центр «Академия КлассИнфо»
Aвтoмaтизaция пpoцecca вeдeния инфopмaциoннoй бaзы o дoлжнocтяx и вaкaнcияx c укaзaниeм тpeбoвaний к уpoвню знaний и нaвыкoв кaндидaтoв для гpуппы кaдpoв вoйcкoвoй чacти 3474»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
Cовершенствование управления рентабельности предприятия (на примере гуипп «бендерская типография «полиграфист»)