
Foxcool
15.10.2018
11:28:56
о прикольно. сколько всякого барахла можно туда слить
вот тогда мой вопрос
Нужно держать пул коннектов. Эти коннекты динамические.
Т.е. в течение работы сервиса могут добавлять или удалять возможные коннекты.
Потому выбрал вариант пула. При проверке и получении сущности коннекта лочим на запись только.
Если надо конектить или инициализировать пул, то лочим совсем.
На всякий случай спрашиваю, не упоролся ли я такое делать? Нарушаю ли потокобезопасность? Есть ли паттерн лучше?
https://play.golang.org/p/571oKHWfHLm
надеюсь понятно оформил

Pawel
15.10.2018
11:31:09
чай не в колхозе Го придумали

Artem
15.10.2018
11:44:07

Google

Александр
15.10.2018
11:44:25
мда
даже элементарную функцию обрамить, скажем что бы скэономить пару строк в хендлерах, уже не тривиально
func validationV1(model interface{}) (bool, error) {
validate := validator.New()
err := validate.Struct(model)
if err != nil {
if _, ok := err.(*validator.InvalidValidationError); ok {
// Ошибка валидации
}
// Ошибка общая
}
// Валидация прошла
}
вроде бы умешается в два значения на возврат, потом опа и уже ситуацию "Ошибка валидации" и "ошибку общую" выше надо обработать (разный ответ)
и понеслось... выносишь и опа уже не сэкономили
лишние 5 строк в хенделер * 20 хендлеров = 100 строк копипаста
говно пошло рекой

JASWGO
15.10.2018
11:48:16
Кто работал с iOS in app purchase на сервере?

Artem
15.10.2018
11:48:42

Александр
15.10.2018
11:48:50
я вот выше выделил
но это не позволяет нам сэкономить ?

Илья
15.10.2018
11:49:06

Александр
15.10.2018
11:49:42

Google

Александр
15.10.2018
11:49:51
проблема не в этом

Artem
15.10.2018
11:50:20


Wingman
15.10.2018
11:50:39
Товарищи, а подскажите, что можно (или нельзя) придумать :)
Что есть: некая штука, которая ходит по cli (telnet, ssh) и snmp кучи разного железа (разные вендоры, разные форматы вывода, разные snmp OID) и собирает кучу разнообразной инфы.
Для каждого ну, скажем, вендора - прямо в коде созданы пакгейджи-профили, которые вызываются, собственно, в зависимости от вендора устройства (вот в этом месте без нормального наследования было тяжко :( )
Для одного и того же результата для разных железок могут потребоваться очень разные действия.
Например, на device#1 для получения списка портов, их типов, состояния, дескрипшнов нужно выполнить одну команду и прогнать аутпут через два регекспа, из которых вытащить данные, а на device#2 для того же самого необходимо сначала split аутпут по какому-то регекстпу, а потом каждый из этих кусков прогнать через 2 регекспа, из которых вытащить данные.
Что хотелось бы: попробовать как-то это всё универсализировать, и задавать профили и их повенедие не в коде, а, скажем, в каких-то "внешних шаблонах": toml/json, мб вообще lua, или ещё как-то.
Цель - избежать хардкода ; попробовать сделать изменяемые/добавляемые профили без перекомпиляции ; дать возможность редактировать их не знающим go.
как вообще в таких случаях принято поступать?)


Александр
15.10.2018
11:50:59
и это не позволит сэкономить - тоесть функция вообще не сработает

Artem
15.10.2018
11:51:19
что значит обработать? зачем7

Александр
15.10.2018
11:51:34
потому что это минимум разные поведения
ошибка валидации и ошибка в библиотеки

Artem
15.10.2018
11:52:01
поведение одно - завершить запрос на проверке валидации

Александр
15.10.2018
11:52:17
он может вылететь "Ошибка общая" если например тег в не валидный в структуре
это уже паника в хенделере и аварийное завершение

Artem
15.10.2018
11:52:37
ну эт сорян, такое в прод не долно идти

Александр
15.10.2018
11:53:01
ты предлагаешь упрощать
но упрощать не вариант тут
иначе мы потеряем

Aleksandr
15.10.2018
11:53:08

Artem
15.10.2018
11:53:23
это как *string не проверил на nil и обратился к нему


Kirill
15.10.2018
11:53:34
Товарищи, а подскажите, что можно (или нельзя) придумать :)
Что есть: некая штука, которая ходит по cli (telnet, ssh) и snmp кучи разного железа (разные вендоры, разные форматы вывода, разные snmp OID) и собирает кучу разнообразной инфы.
Для каждого ну, скажем, вендора - прямо в коде созданы пакгейджи-профили, которые вызываются, собственно, в зависимости от вендора устройства (вот в этом месте без нормального наследования было тяжко :( )
Для одного и того же результата для разных железок могут потребоваться очень разные действия.
Например, на device#1 для получения списка портов, их типов, состояния, дескрипшнов нужно выполнить одну команду и прогнать аутпут через два регекспа, из которых вытащить данные, а на device#2 для того же самого необходимо сначала split аутпут по какому-то регекстпу, а потом каждый из этих кусков прогнать через 2 регекспа, из которых вытащить данные.
Что хотелось бы: попробовать как-то это всё универсализировать, и задавать профили и их повенедие не в коде, а, скажем, в каких-то "внешних шаблонах": toml/json, мб вообще lua, или ещё как-то.
Цель - избежать хардкода ; попробовать сделать изменяемые/добавляемые профили без перекомпиляции ; дать возможность редактировать их не знающим go.
возьми lua и всё
Товарищи, а подскажите, что можно (или нельзя) придумать :)
Что есть: некая штука, которая ходит по cli (telnet, ssh) и snmp кучи разного железа (разные вендоры, разные форматы вывода, разные snmp OID) и собирает кучу разнообразной инфы.
Для каждого ну, скажем, вендора - прямо в коде созданы пакгейджи-профили, которые вызываются, собственно, в зависимости от вендора устройства (вот в этом месте без нормального наследования было тяжко :( )
Для одного и того же результата для разных железок могут потребоваться очень разные действия.
Например, на device#1 для получения списка портов, их типов, состояния, дескрипшнов нужно выполнить одну команду и прогнать аутпут через два регекспа, из которых вытащить данные, а на device#2 для того же самого необходимо сначала split аутпут по какому-то регекстпу, а потом каждый из этих кусков прогнать через 2 регекспа, из которых вытащить данные.
Что хотелось бы: попробовать как-то это всё универсализировать, и задавать профили и их повенедие не в коде, а, скажем, в каких-то "внешних шаблонах": toml/json, мб вообще lua, или ещё как-то.
Цель - избежать хардкода ; попробовать сделать изменяемые/добавляемые профили без перекомпиляции ; дать возможность редактировать их не знающим go.
работает норм

Google

Wingman
15.10.2018
11:53:48

Kirill
15.10.2018
11:54:39
получается довольно удобно)

Wingman
15.10.2018
11:55:16
но лучше бы конечто как-то сделать что-то "описательное"
типа конфига


Илья
15.10.2018
11:57:11
Товарищи, а подскажите, что можно (или нельзя) придумать :)
Что есть: некая штука, которая ходит по cli (telnet, ssh) и snmp кучи разного железа (разные вендоры, разные форматы вывода, разные snmp OID) и собирает кучу разнообразной инфы.
Для каждого ну, скажем, вендора - прямо в коде созданы пакгейджи-профили, которые вызываются, собственно, в зависимости от вендора устройства (вот в этом месте без нормального наследования было тяжко :( )
Для одного и того же результата для разных железок могут потребоваться очень разные действия.
Например, на device#1 для получения списка портов, их типов, состояния, дескрипшнов нужно выполнить одну команду и прогнать аутпут через два регекспа, из которых вытащить данные, а на device#2 для того же самого необходимо сначала split аутпут по какому-то регекстпу, а потом каждый из этих кусков прогнать через 2 регекспа, из которых вытащить данные.
Что хотелось бы: попробовать как-то это всё универсализировать, и задавать профили и их повенедие не в коде, а, скажем, в каких-то "внешних шаблонах": toml/json, мб вообще lua, или ещё как-то.
Цель - избежать хардкода ; попробовать сделать изменяемые/добавляемые профили без перекомпиляции ; дать возможность редактировать их не знающим go.
lua/ruby, если хочется декларативного, то можно посмотреть в http://jmespath.org


Wingman
15.10.2018
11:57:28
ага, благодарю, тоже посмотрю


Roman
15.10.2018
11:59:03
Товарищи, а подскажите, что можно (или нельзя) придумать :)
Что есть: некая штука, которая ходит по cli (telnet, ssh) и snmp кучи разного железа (разные вендоры, разные форматы вывода, разные snmp OID) и собирает кучу разнообразной инфы.
Для каждого ну, скажем, вендора - прямо в коде созданы пакгейджи-профили, которые вызываются, собственно, в зависимости от вендора устройства (вот в этом месте без нормального наследования было тяжко :( )
Для одного и того же результата для разных железок могут потребоваться очень разные действия.
Например, на device#1 для получения списка портов, их типов, состояния, дескрипшнов нужно выполнить одну команду и прогнать аутпут через два регекспа, из которых вытащить данные, а на device#2 для того же самого необходимо сначала split аутпут по какому-то регекстпу, а потом каждый из этих кусков прогнать через 2 регекспа, из которых вытащить данные.
Что хотелось бы: попробовать как-то это всё универсализировать, и задавать профили и их повенедие не в коде, а, скажем, в каких-то "внешних шаблонах": toml/json, мб вообще lua, или ещё как-то.
Цель - избежать хардкода ; попробовать сделать изменяемые/добавляемые профили без перекомпиляции ; дать возможность редактировать их не знающим go.
взял бы python - не страдал бы.


Wingman
15.10.2018
11:59:15
только тут го-профили добавлять, а там py-профили

Roman
15.10.2018
11:59:57

Wingman
15.10.2018
12:00:08
ну с наследованием да
:(

Roman
15.10.2018
12:02:28
если бы я делал подобную систему, то разбил бы все на мелкие i/o сервисы с которыми все общение сообщениями

Wingman
15.10.2018
12:03:40
а кто тебе сказал, что я не так делаю?

Евгений
15.10.2018
12:03:41

Roman
15.10.2018
12:04:45

Wingman
15.10.2018
12:04:54
так это к делу особо отношения не имеет )

Илья
15.10.2018
12:08:21
но не стоит

Google

Roman
15.10.2018
12:08:28
так это к делу особо отношения не имеет )
смотри, тебе фактически надо сделать программируемый pipeline. в каком-нибудь toml это выглядело как определение всех его элементов(foo, bar, baz) и их входных параметров, а потом уже описание порядка их выполнения

Wingman
15.10.2018
12:09:15

Roman
15.10.2018
12:10:27

Nikolay
15.10.2018
12:10:34

Wingman
15.10.2018
12:10:53

Roman
15.10.2018
12:11:08

Wingman
15.10.2018
12:11:08
if X then re1 elseif Y then re2, etc.
else re3.split
типа такого)

Roman
15.10.2018
12:12:00

Wingman
15.10.2018
12:12:06
ну почему
типа там, например: профиль 'cisco': 1) determine platform; 2) if platform is router { ... } else if platform is switch { ... }

Roman
15.10.2018
12:13:37

Wingman
15.10.2018
12:14:11
ну вот в идеале было бы всё это в одном "конфиге" описать )

Roman
15.10.2018
12:15:23

Wingman
15.10.2018
12:15:31
%(

Foxcool
15.10.2018
12:15:45

Roman
15.10.2018
12:17:10
%(
https://github.com/Juniper/py-junos-eznc/tree/master/lib/jnpr
советую посмотреть )

Wingman
15.10.2018
12:17:51
да не люблю я этот ваш питон %))
но посмотрю, спасибо

Google

Roman
15.10.2018
12:19:58
но посмотрю, спасибо
там идеи стоит почерпнуть. те же транспорты, которых там 4 шт(netconf/serial/ssh/telnet)

Wingman
15.10.2018
12:20:57
да транспороты я уже сделал
и вообще всё работает
я прям доволен %)
но хочу вот теперь динамическую конфигурацию

Виктория
15.10.2018
12:21:18
Добрый день! С кем можно обсудить вопрос публикации поста о хакатоне для программистов и разработчиков с большими денежними призами? Пишите в ЛС.

Мерлин
15.10.2018
12:23:23
Хотите страшненького?
https://play.golang.org/p/ZL6cW7D3SkL

Artem
15.10.2018
12:23:38

Вячеслав
15.10.2018
12:25:21

Wingman
15.10.2018
12:29:58

Илья
15.10.2018
12:31:01
попробуй подумать про конфигурацию разных пайпланов в зависимости от источника
а не общий пайплайн с кучей if

Wingman
15.10.2018
12:31:57
не очень понял
что есть источник
источник всегда БД ; максимум, что задаётся — название/id профиля. Дальше софт уже сам шуршит по железкам и делает дела согласно заданному профилю

Илья
15.10.2018
12:32:48
сначала парсишь платформу и в зависимости от платформы используешь нужный пайплан

Wingman
15.10.2018
12:33:10
ну про платформу я сказал просто для примера, этих ифов может быть 100500
блин, тоже не так
хз, как обьяснить толком %)
ладно, отложу в долгий ящик, мне несложно и в го профилли описывать )

Евгений
15.10.2018
12:34:59

Roman
15.10.2018
12:38:13