Повышение качества разработок и онлайн контроль ошибок

Администрирование - Журнал регистрации

Журнал регистраций http Stackdriver Error Reporting Google Cloud Platform GCP isthisdesign.org

151
Анализ ошибок и сбор ошибок журнала регистраций из десятков и сотен баз в одном месте.

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

О чем я хочу поговорить сегодня ? Если я скажу о том, что я хочу говорить про то, как интегрировать 1С с неким “100500” сервисом, то вряд ли кто-то отнесется к этому с той серьезностью, которую бы мне хотелось получить.

Поэтому я скажу по другому:

Я хочу поговорить про качество обслуживания баз 1С

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

Позвольте задать вопрос - как часто вы пролистываете журнал регистраций на поиск ошибок?

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

Почему я решился на написание именно этой статьи?

Честно? Мне надоело нытье моих собратьев о том, что клиенты жалуются, говорят что в программе много ошибок, что 50 раз в день они нарываются на какие-то баги, а по факту - это всего лишь 2-3 ошибки в день.
Что коллегам по цеху не удобно листать эти полотнища в виде ЖР и искать в них зерно истины. Что вот прям завтра, они поднимут свою систему для этих целей и вот тогда то...

И так, для кого эта статья предназначена?

  1. Для администраторов баз данных клиента (как внутренних, так и внешних)
  2. Для специалистов тех поддержки
  3. Для разработчиков (наконец).

 

Теперь предлагаю пофантазировать и ответить на вопрос “А следили ли Вы бы за ошибками?”, если:

  1. Была подписка на все ошибки
  2. Можно было бы в онлайне отлавливать ошибки по всем клиентам, по всем базам данных, по 500 РИБам, по мобильным устройствам? И видеть это все в браузере/телефоне/телевизоре?
  3. Если бы ошибки можно было группировать, смотреть когда они появились в первый раз, когда был последний раз, сколько пользователей с ними столкнулись, как часто это было?
  4. Если бы сервис показывал в каких версиях расширения/конфигурации эта ошибка была ранее?
  5. Если бы для реализации всего этого - не надо было бы платить ни копейки и иметь квоту в 170 000 запросов в день? (во всяком случае - пока)
  6. Если бы вы могли взять любую базу клиента, прописать пару строк, потратить 10 минут времени на перекур и собрать анализ по всем ошибкам этого клиента, которые попали в журнал регистраций за последних 30 дней?
  7. Если бы можно было дать доступ клиенту к спискам именно его ошибок, чтобы он сам отмечал те ошибки, которые являются критичными, и мог “затыкать” рот Марьи Ивановне, которая говорит, что у нее 100500 ошибок в день, а по факту всего 2-3?
  8. Если бы на внедрение всего этого - надо было бы потратить всего 15 минут времени?
  9. Если бы этот ресурс предоставлял гигант IT мира?
  10. Если бы вы были клиентом, а не программистом, и вы хотели бы “втихаря” собирать реальную статистику ошибок в базе данных, для того, чтобы дать нагоняя IT отделу, или компании, которая обслуживает, и вам бы для этого не понадобилось владеть огромными навыками программирования?
  11. … куча всяких других рекламных если…

Надеюсь, что ответ - “да”. И я уже не один...

Раскрываем карты

Сервис Google Cloud Platform

Размещается по адресу https://console.cloud.google.com

Там появился новый сервис, который позволяет отлавливать баги. Сейчас он находится в статусе беты, так что им можно пользоваться почти безвозмездно. Кроме этого - Google дает нам бесплатный бонус на 300$ на один год, который можно активировать уже после того, как сервис выйдет из беты. Пока Google дает 170 000 запросов в день бесплатно, про остальное - надо с ними списываться и решать, цен в открытом доступе пока нет.

Выглядит это все в итоге вот так:


По пунктам:

  1. Выбор проекта, т.е. можно завести под каждого клиента отдельный проект
  2. Сервисы, мы их используем в качестве имени конфигурации/расширения где произошла ошибка
  3. Версии - версии конфигурации или расширения
  4. Фильтр по типам задач
  5. Автоматическое обновление страницы ошибок. Очень помогает, когда в офисе на стене висит телевизор и в нем появляются все ошибки за текущий день.
  6. Можно включить уведомления, которые бы отправлялись в случае новых ошибок
  7. Период анализа ошибок.

Посмотрим одну ошибку детальнее:

Тут есть - описание ошибки, где она возникла, в какой строке, в каком модуле.
Кроме этого - четко видно, сколько раз она проявлялась и сколько РАЗНЫХ пользователей было затронуто ею.
Так же видно, где она проявлялась, в каких расширениях/конфигурациях и их версиях.
Ну и когда она была зарегистрирована первый раз и последний.
Ну и вишенка на торте, для тех, кто уже перешел в гит - если нажать на ссылку ошибки, там где ее путь слева вверху, то появится вот такое окно:

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

Краткий план действий

Понравилось? Если да, то чтобы это все реализовать, нам необходимо проделать несколько шагов:

  1. Зарегистрировать Google аккаунт (если еще есть те, у кого его нет)
  2. Зайти в консоль Google Cloud Platform
  3. Создать нужный проект
  4. Включить использование API Stackdriver Error Reporting
  5. Сгенерировать ключ для API
  6. Накатить расширение на базу и прописать в модуле настроек ID проекта и ключ
  7. Нажать кнопку - выгрузить данные ЖР
  8. Выпить кофе
  9. Посмотреть на результат в консоле

Если знать что и как делать - все шаги занимают 10 минут. Приступим.

Создание проекта для выгрузки

Я надеюсь, что обычный Google аккаунт есть уже у всех, так что идем сразу дальше.
Переходим по ссылке: https://console.cloud.google.com
Соглашаемся с условиями.
Идем в раздел регистрации ошибок:

Нас попросят создать проект:

Нажимаем на создание, и пишем имя проекта, оно нам надо будет далее. Я называю их как “ua-company-db”, т.е. страна, внутренне названии компании и имя базы, если я их разделяю.
Если все будет хорошо, то мы увидим вот такую картинку:

 

Теперь нам надо активировать API, для этого идем по этой ссылке: https://cloud.google.com/error-reporting/reference/
И нажимаем вот на эту кнопку:

Нас перекинет потом вот на эту страницу:


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

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

И создаем ключ для доступа к API:


Указываем имя ключа, а так же можем настроить ограничение использования, это надо, если разнесены сервер 1С центральный и тестовый, и чтобы случайно не послать с тестового сервера ошибки - можно указать конкретный адрес/подсеть, откуда будут приниматься уведомления. Плюс, это безопасность. Но мы никаких ограничений не ставим, во всяком случае для теста, ключ потом можно удалить и создать новый:

И жмем на кнопку Создать.
После этого - появится окошко с ключем:

Копируем его куда-то и закрываем окно.

В итоге у нас должно быть вот такое:

И последнее что нам надо - это ID проекта:


Все, теперь мы создали все, что нам было необходимо, идем обратно в дашборд ошибок:

Итого, все это мы проделывали для двух вещей:

  • ID проекта, в нашем случае это test-1c-log
  • Ключ доступа, в нашем случае это AIzaSyB3cq1-9TksRyzP_r00wYlwi1pL-d2G7x4

Тестирование

Для теста нам понадобится просто платформа 8.3.10 или новее. Создадим пустую базу, и подключим туда расширение.
Вообще - механизмы будут работать везде, но, платформа должна уметь формировать JSON, хотя, можно и собрать его руками, через СтрШаблон. Кроме этого - платформа должна будет уметь отправлять POST запросы, но опять таки, есть cURL, так что по большому счету - этот сервис можно интегрировать даже с 7.7. При желании. При достаточном желании.


Создаем пустую базы данных, и цепляем к ней расширение. Не забываем у расширения снять обе галочки, а то нас не выпустят во внешний мир.
Идем в модуль настроек в расширении, видим такую картину:

Сюда мы потом пропишем ключи доступа. НО! Пока ничего не пишем. Запускаем в режиме предприятия, открываем обработку GCP тест:

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

После того как ткнем кнопку пару раз, идем в журнал регистрации и проверяем там, что ошибки наши зафиксированы:

Теперь возвращаемся в конфигуратор, в модуль настроек, и заполняем данными:

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

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

Итого

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

Кейс. Обращается ко мне клиент, хочет чтобы его взяли на обслуживание. Я создаю новый проект, подключаю к базе расширение, или выношу весь функционал во внешнюю обработку, запускаю выгрузку ТЖ. Иду курить и пить кофе. Прихожу через 15 минут и показываю ему “весь ужас” его базы. Где количество ошибок может достигать сотен, а одни и те же ошибки - тысяч, а то и десятков.

Кстати, если вы посмотрите функцию НеОшибки, то она так раз и сделала чтобы отлавливать не ошибки конфигурации:

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

Где это реально используется? Мы используем это у клиентов где сотни РИБ узлов, для анализа ошибок.

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

P.S.

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

P.P.S. Сервис бесплатный, по крайней мере пока он находится в стадии теста, но даже если он станет платным, есть возможность активировать 300$ бонуса на один год, и таки год им пользоваться бесплатно, а дальше уже решать.
Ну и конечно, просмотреть текущий уровень квот можно в специальном разделе


И тут красиво показывается сколько запросов за текущий день было сделано.


Заключение

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

Кроме этого, мы используем еще и FireBase и Google Analitics, где мы строим карты пользования магазинами 1С, вычисляем каким функционалом пользуются часто, а какой надо удалить, какие есть бест практики, как быстро в среднем отрабатывает функционал, и многое многое другое.

Кстати, про Google Analitics будет доклад на майском хакатоне . https://isthisdesign.org/

Цель подобного подхода

На самом деле на ближайшем хакатоне (если кто не в курсе он пройдет в мае в Москве), будет второй день для разбора проблем https://isthisdesign.org/shedule#day2

Я предполагаю, что проблема “Мониторинг 1С” на ней возникнет, и если возникнет я поделюсь вот этими своими наработками и/или расскажу - как мы с этим работаем. Видь просто выгрузить куда то это одно, а уметь читать и использовать - это уже другое. Возможно это не похоже на пропагандируемый ЦУП и elasticSearch, но проблему ведь решает и результат отличный. Тем более, что для этого не надо иметь свою инфраструктуру и специализированные знания.

 

151

Скачать файлы

Наименование Файл Версия Размер
Расширение GCP Error
.cfe 14,61Kb
08.03.18
116
.cfe 1.3.7 14,61Kb 116 Скачать бесплатно

См. также

Комментарии
Избранное Подписка Сортировка: Древо
3. infosoft-v 283 11.03.18 19:51 Сейчас в теме
4. vlad.frost 178 11.03.18 20:37 Сейчас в теме
Герман Клименко:
Технически российское государство готово к отключению от мировой глобальной паутины.
yarunya; kote; vano-ekt; TreeDogNight; Lo1jke; pm74; 9-pm; +7 Ответить
6. DitriX 2786 12.03.18 14:04 Сейчас в теме
(4) если не будут доступны сервисы гугла, то я боюсь, что не работающая онлайн система ошибок - будет наименьшей проблемой из всех :)

(5)Уникального ничего нету, просто пост запросы с парсингом ЖР. Я этот модуль с нуля написал за 2 часа (так как мы используем более глобальные вещи, и объяснять их тут заняло бы кучу времени).

На счет физиков - вы же не можете работать с клиентами как физик ;) Вы либо сотрудник компании (ЧП, ООО и т.д.) или сами являетесь этой компанией. А физика можно использовать просто для тестов :)
37. sergathome 21.03.18 17:19 Сейчас в теме
(6) Счастье в другом. Вся эта красотища влёгкую нарушает практически любое соглашение с клиентом о конфиденциальности...
38. DitriX 2786 21.03.18 21:20 Сейчас в теме
(37)например? Я не знаком ни с одним соглашением, которое бы можно было нарушить этим сервисом.
С каких это пор - код конфигурации, а точнее не код, а его эпизоды - стали конфеденциальной информацией?
Или название расширения это запрещенные данные?
Конечно, если вы туда будете выгружать цифр по рентабельности, долгам и прочее -- тогда да, но сервис как бы не для того.
В этом случае вы и гитом не можете пользоваться, и пуши отправлять на мобильники и т.д. Но в таком случае - это просто статья не для вашего случая :)
С другой стороны, скорее проще взломать сервер клиента и получить доступ к базе, чем взломать гугл аккаунт и получить доступ к списку багов :)
TreeDogNight; user597616_i.d.kravchenko; JohnyDeath; +3 Ответить
40. sergathome 22.03.18 09:00 Сейчас в теме
(38) и тем не менее. клиент, неожиданно узнавший, что его данные попали на некий внешний, а тем паче - вражеский ресурс, способен выиграть суд. это шутка, пока оно шутка.
41. DitriX 2786 22.03.18 21:47 Сейчас в теме
(40) А вы собираетесь такое проделывать без согласия пользователя?
43. sergathome 23.03.18 13:48 Сейчас в теме
(41) я - нет, но знаю тех, кто об этом даже не задумывается ;))
45. yarunya 64 19.04.18 15:56 Сейчас в теме
(4) Голову пусть себе отключат...
5. MaCCapAkIII 12.03.18 01:40 Сейчас в теме
Все очень грамотно и полезно. А самостоятельно можно создать подобное расширение или у вас уникальное там что-то?

И еще. Есть информация, что физикам в принципе нельзя использовать теперь GCP... https://goo.gl/ior7gh
7. Scorpion4eg 101 12.03.18 14:12 Сейчас в теме
Все больше убеждаюсь что Google это корпорация добра. Столько всего предоставляет на бесплатной или почти бесплатной основе.
Google Analytics(а я думаю почему я икаю), Google Vision(распозновалка фото), естественно Google Maps, Google shortner, такая еще штука.
9. lustin 986 12.03.18 20:52 Сейчас в теме
(7) Еще firebase - мы тут её к OScript прикручиваем, ваще вещь
10. DitriX 2786 13.03.18 02:29 Сейчас в теме
(9)и че я не в теме и не при делах. Давай кооперироваться :) Я сейчас тоже это делаю.
15. lustin 986 14.03.18 18:49 Сейчас в теме
(10) это кстати тема доклада Алексея Соснового + моя на блиц докладах. Я покажу код. Тебе как докладчику могу показать чуть раньше ;-)

Я хочу чтобы к октябрьской конференции это было готово вкупе с наработками Андрюхи по Oscript Web - тогда к октябрю для Инфостарта мы сделаем самый крутой Веб фреймворк в мире ;-).

а чтобы быть в теме ;-) надо следить за моим facebook акаунтом - я там выкладываю гифки того над чем работаю.



kote; Brawler; TreeDogNight; +3 Ответить
24. DitriX 2786 16.03.18 17:43 Сейчас в теме
(15)увы, соцсети не мое, нет на них время. Лучшая соцсеть - бокал пива и беседа :)
22. vano-ekt 1111 15.03.18 15:03 Сейчас в теме
46. Region102 32 20.06.18 06:40 Сейчас в теме
(7) Google уже давно корпорация бабла
8. support 4408 12.03.18 19:09 Сейчас в теме
11. spezc 505 13.03.18 12:10 Сейчас в теме
Божественно! Держи звезду.
12. Alias 148 14.03.18 14:46 Сейчас в теме
Можете уточнить, как "дать доступ клиенту к спискам именно его ошибок, чтобы он сам отмечал те ошибки, которые являются критичными, и мог “затыкать” рот Марьи Ивановне, которая говорит, что у нее 100500 ошибок в день"?
Или, иначе говоря, даже по скриншоту видно -- есть общее количество ошибок, есть количество затронутых пользователей. И если провалиться в ошибку, то видно список последних ошибок, опять в них провалиться и увидеть пользователя. А как сделать фильтр по ошибкам одного пользователя? Как посмотреть не "список последних ошибок", а полный?
13. DitriX 2786 14.03.18 18:16 Сейчас в теме
(12) не одного пользователя, а по проекту. Вы создаете на каждого клиента свой проект, и даете доступ только к их проекту.
14. mitia.mackarevich 22 14.03.18 18:47 Сейчас в теме
В транзакции также вставляете обращение к сервису напрямую, при записи документа например?))
Вопрос снят, перечитал статью, под вечер голова не варит=)
16. Gladkov_Anton 73 14.03.18 21:04 Сейчас в теме
Без изменения кода конфигурации и без конструкции "попытка" логирование ошибок в googole будет?
25. DitriX 2786 16.03.18 17:43 Сейчас в теме
(16) собираются данные из ЖР. В этом варианте.
28. Gladkov_Anton 73 19.03.18 09:26 Сейчас в теме
(25) Прошу прощения, но я так и не понял.
Есть базы данных без доработок.
В них происходит исключение. В ЖР оно НЕ попадает.
Я правильно понимаю, что таки ошибки НЕ попадут в google?
29. DitriX 2786 19.03.18 14:21 Сейчас в теме
17. TreeDogNight 15 15.03.18 06:21 Сейчас в теме
Никак не могу понять, по какому принципу происходит группировка ошибок?
Прикрепленные файлы:
18. JohnyDeath 291 15.03.18 08:37 Сейчас в теме
(17) может по тексту самой ошибки?
19. TreeDogNight 15 15.03.18 11:33 Сейчас в теме
(18) Тоже так думал. Но при открытии ошибки, внутри отображаются другие ошибки...
Прикрепленные файлы:
21. vova329 15.03.18 14:26 Сейчас в теме
(19) Я так понял в группировке участвуют и метаданные, копай сюда
Прикрепленные файлы:
20. Adam12345678 3 15.03.18 14:22 Сейчас в теме
23. Adam12345678 3 15.03.18 15:18 Сейчас в теме
Позволил себе добавку в коде, иначе не выводит нужную информацию
Если ОшибкаИТекст.Количество() > 1 Тогда
//Обработка пути ошибки
РасширениеИПуть = СтрРазделить(ОшибкаИТекст[0], " ", Ложь);
Если РасширениеИПуть.Количество() > 1 Тогда
	.........оригинальный код
Иначе   //добавка по смыслу, иначе не заполняет важную информацию об ошибке
 ПутьОшибки =  РасширениеИПуть[0];
 ПутьИСтрокаОшибки = СтрРазделить(ПутьОшибки, "()", Ложь);
Если ПутьИСтрокаОшибки.Количество() > 1 Тогда
Попытка
reportLocation.lineNumber = Число(ПутьИСтрокаОшибки[1]);
Исключение
КонецПопытки;
							
СоставПутиОшибки = СтрРазделить(ПутьИСтрокаОшибки[0], ".", Ложь);
reportLocation.functionName = СоставПутиОшибки[СоставПутиОшибки.ВГраница()];
СоставПутиОшибки.Удалить(СоставПутиОшибки.ВГраница());
reportLocation.filePath = СтрСоединить(СоставПутиОшибки,".");
КонецЕсли;
//конец добавки
КонецЕсли;

Показать
TreeDogNight; +1 Ответить
26. DitriX 2786 16.03.18 17:45 Сейчас в теме
(23) спасибо. Писалось это на коленке, я думаю по стилю кода видно :) Так, в целях обучения. Реальный код много сложнее.
27. TreeDogNight 15 17.03.18 07:57 Сейчас в теме
Сделал доработку, чтобы работало на более старых платформах:
Функция НастройкиОповещенияОбОшибках() Экспорт
	
	СтрокаНастроек = "
	|{
	|  'projName': 'projects/project',
	|  'key': 'key',
	|}
    |";
	СтрНастроек = ПреобразованиеJSON(СтрокаНастроек);

	Возврат СтрНастроек;
	
КонецФункции

Функция ПреобразованиеJSON(СтрокаНастроек)
	
	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(СтрокаНастроек);
	
	Возврат ПрочитатьJSON(ЧтениеJSON);	

	
	//Чтение = Новый ЧтениеJSON;
	//Чтение.УстановитьСтроку(СтрокаНастроек);
	//Чтение.Прочитать();
	//СтрНастроек = ФабрикаXDTO.ПрочитатьJSON(Чтение);
	//Чтение.Закрыть();
	//Возврат СтрНастроек;
	
КонецФункции

Показать


 Процедура ОтправитьОшибку(СтруктураОшибки,Ошибка = Ложь, ЭтоЖурнал = Ложь) Экспорт
	
	Соединение = Новый HTTPСоединение("clouderrorreporting.googleapis.com",443,,,,10, Новый ЗащищенноеСоединениеOpenSSL);
	СтрСоединения = НастройкиОповещенияОбОшибках();
	Запрос = Новый HTTPЗапрос("v1beta1/" + СтрСоединения.projName + "/events:report?key=" + СтрСоединения.key);
	Запрос.Заголовки.Вставить("Content-Type", "application/json");
	
	//Запись = Новый ЗаписьJSON;
	//Запись.УстановитьСтроку();
	//ФабрикаXDTO.ЗаписатьJSON(Запись,СтруктураОшибки);
	Текст = СериализоватьВJSON(СтруктураОшибки, Истина);     
	
	//Текст = СтрЗаменить(Текст,"""#value"": ",""); //удаляем мусор от 1С
	//Текст = Сред(Текст,2,СтрДлина(Текст) - 2); 	  //Убираем {}
	Запрос.УстановитьТелоИзСтроки(Текст,КодировкаТекста.UTF8);        
	
	Ответ = Соединение.ОтправитьДляОбработки(Запрос);     
	Если Ответ.КодСостояния <> 200 Тогда                                 
		Если НЕ ЭтоЖурнал Тогда
			ЗаписьЖурналаРегистрации(СтруктураОшибки.message,УровеньЖурналаРегистрации.Ошибка,,,?(Ошибка = Ложь, "", ПодробноеПредставлениеОшибки(Ошибка)));
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

Функция СериализоватьВJSON(Объект, ПервыйУровень = Ложь) 
	
	СвойстваОбъекта = Объект.Свойства();
	СтруктураСвойств = Новый Структура;
	
	Для каждого Свойство Из СвойстваОбъекта Цикл
		ЗначениеСвойства = Объект[Свойство.Имя];
		Если ТипЗнч(ЗначениеСвойства) = Тип("ОбъектXDTO") Тогда
			СтруктураСвойств.Вставить(Свойство.Имя, СериализоватьВJSON(ЗначениеСвойства));	
		ИначеЕсли ТипЗнч(ЗначениеСвойства) = Тип("СписокXDTO") Тогда
			МассивЗначений = Новый Массив;
			Для каждого Стр Из ЗначениеСвойства Цикл
				Если ТипЗнч(Стр) = Тип("ОбъектXDTO") Тогда
					МассивЗначений.Добавить(СериализоватьВJSON(Стр));
				Иначе 
					МассивЗначений.Добавить(Стр);
				КонецЕсли; 	
			КонецЦикла; 	
			
			СтруктураСвойств.Вставить(Свойство.Имя, МассивЗначений);	
		Иначе 
			СтруктураСвойств.Вставить(Свойство.Имя, ЗначениеСвойства);	
		КонецЕсли; 	
	КонецЦикла;
	
	Если Не ПервыйУровень Тогда
		Возврат СтруктураСвойств;	
	КонецЕсли; 
	
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	ЗаписатьJSON(ЗаписьJSON, СтруктураСвойств);
	
	Возврат ЗаписьJSON.Закрыть();	
	
КонецФункции 
Показать
kare; DitriX; +2 Ответить
30. devlabnn 73 20.03.18 06:24 Сейчас в теме
Спасибо! Теперь используем у себя (РИБ 170 узлов).


Группируются ошибки по сочетанию functionName + filePath (без учета ineNumber)
Пришлось включить lineNumber в filePath
reportLocation.functionName = reportLocation.functionName + "_" + reportLocation.lineNumber;


Есть еще проблема - при нажатии Подробнее... на странице ошибки переходим на страницу 404.


Из-за этого использую юзер-цсс (во вложении), чтобы можно было посмотреть текст ошибки полностью, непосредственно в списке ошибок.
Прикрепленные файлы:
console.cloud.google.com_errors.css
DitriX; TreeDogNight; +2 Ответить
31. DitriX 2786 20.03.18 15:20 Сейчас в теме
(30) будет отлично - если напишите встречную статью о том, как вам это все помогло, или не помогло :)
34. devlabnn 73 21.03.18 09:41 Сейчас в теме
(31) Ощущения смешанные. С одной стороны - очень удобно видеть агрегированные данные по количеству инцидентов и затронутых узлов.
С другой - пока прикладная польза не понятна. Но прикольно :).
36. DitriX 2786 21.03.18 14:28 Сейчас в теме
(34)мы этот механизм часто используем при внерении нового функционала в 200 рибах. Когда мы оперативно ловим ошибки и сразу шлем обновления. Благо мы все стараемся через расширения. Так что одна кнопка, 5 минут и 200 касс работают с обновленной версией :)
32. TreeDogNight 15 20.03.18 20:37 Сейчас в теме
(30)
nName + "_" + reportLocation.lineNumber;

Можете подробнее рассказать как вы используете этот "юзер-цсс"?
33. devlabnn 73 21.03.18 08:32 Сейчас в теме
(32)
1. Установить расширение user css или аналог (есть для всех браузеров). Например, для Chrome / Яндекс браузера я использую это

2. Скопировать текст в окно расширения, как на скриншоте:


3. Результат
Прикрепленные файлы:
console.cloud.google.com_errors.css
DitriX; TreeDogNight; +2 Ответить
35. TreeDogNight 15 21.03.18 09:56 Сейчас в теме
39. Avliyarov 22.03.18 06:08 Сейчас в теме
"Исчерпан доступный лимит развертываний. Показаны данные только для последних развертываний." - выдает при создании проекта
это я так понимаю - косяк тестовой среды?
42. DitriX 2786 22.03.18 21:48 Сейчас в теме
(39) где и когда возникает ошибка?
44. pbabincev 96 05.04.18 11:41 Сейчас в теме
Это просто великолепная работа!
Автор, Дмитрий, спасибо!
Включаем с ребятами для своей РИБ-12.
Оставьте свое сообщение