Git Product home page Git Product logo

arkuznetsov / hirac Goto Github PK

View Code? Open in Web Editor NEW
41.0 4.0 15.0 329 KB

REST API для получения информации о кластере сервера 1С и управления объектами кластера

License: Mozilla Public License 2.0

1C Enterprise 99.50% Batchfile 0.13% Dockerfile 0.20% Shell 0.18%
1c 1c-enterprise onescript oscript bsl mssql oscript-web rac ras onescript-web

hirac's People

Contributors

arkuznetsov avatar thedemoncat avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

hirac's Issues

Не отображается русский язык

Проблема с отображением русского языка.
Режим запуска: в контейнере, на Ubuntu.

Пример ответа в браузере:
"name": "╨Ы╨╛╨║╨░╨╗╤М╨╜╤Л╨╣ ╨║╨╗╨░╤Б╤В╨╡╤А", "lifetime-limit": 0, "max-memory-size": 0, "security-level": 0, "session-fault-tolerance-level": 0,

Ошибки в Prometheus, кодировки, службы

Привет
группа ошибок
расскатал hirac на англоязычной версии Win,

  1. в респонсах на запросы прилетает вместо русских имён юзеров - '??????'
  2. на видне служба либо не ставится, либо ещё чего. исправил файл для создания службы, ОС кричит при старте, что служба вовремя не ответила с кодом 1053
  3. если вручную запустить - в prometheus валятся ошибки
    "expected label name, got "INVALID""

конфа прометея

 - job_name: 'stat_1c'
    scrape_interval: 60s
    scrape_timeout: 20s
    params:
      format: ['prometheus']
      dim: ['_all']

    static_configs:
      - targets: ['10.0.12.110:5005']
    metrics_path: '/counter/session'

hirac с develop ветки, ибо с обычной других куча ошибок

prometeus provider

я как инженер по инфраструктуре хочу иметь "дырку" для подключения прометея

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

cat prometeus-server.yaml
scrape_configs:
- job_name: hirac-job
  static_configs:
  - targets: ['hirac-host:9091']
  scrape_interval: 1s

пока мысли такие, чтобы пробросить это дело в OScript.Web - то есть обернуть метод например отсюда https://github.com/prometheus-net/prometheus-net

в некую фигню типа

ИмяМетрикиАнгл = "licence-count";
ИмяКонтекста="job=hirac-srv-app-01";
ИмяКонтура="instance=ones-servers";
ЗначениеМетрики=ПолучитьТекущееКоличествоЛицензииЧерезHIRAC();
КоллекцияМетокМетрики = Новый Структура(
"russian-metric-name","Количество использованных клиентских лицензий 1С"
);


АдаптерМетрикМенеджер.ОпубликоватьМетрику(
   ИмяМетрикиАнгл , ИмяКонтекста,ИмяКонтура, КоллекцияМетокМетрики, ЗначениеМетрики
);

Отсутствие образа evilbeaver/oscript-web:latest

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

Добавить возможность предварительной фильтрации объектов кластера

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

http://localhost:5005/infobase/list?filter_label=Alexander&field=_all

Происходит это из-за того, что фильтр по полям срабатывает уже после получения всей информации по объектам. Для каждой базы в кластере сначала вызывается функция ЗаполнитьРасширенноеОписаниеОбъекта, а уже после работает фильтр.
Если у пользователя нет прав на какие-нибудь базы, это еще замедляет выполнение запроса и приводит вот к таким ошибкам:
err

Хотелось бы иметь следующую функциональность
Хотелось бы, чтобы была возможность предварительной фильтрации объектов, например, по идентификатору или представлению. Это ускорило бы получение информации по конкретному объекту, в частности по конкретной информационной базе.

Не обновляется кэш описания информационных баз, если нет соединения с СУБД

Описание проблемы

Использую hirac на машине, где вообще не установлена какая-либо СУБД. RAS запущен на этой же машине, но смотрит он на кластер, расположенный на другом сервере.

racsettings.json по умолчанию.

Обработка запроса списка сессий происходит довольно долго, около 15 секунд. В ответе на запрос нет нормального представления информационной базы

hirac_none

Причина

Директива Продолжить вот в этом месте приводит к тому, что переменная ОписанияОбъектовКластеров не заполняется. В момент обновления кэша информационных баз данная переменная является ссылкой на глобальную переменную модуля ОписанияИнформационныхБаз, соответственно кэш всегда остается пустым и для каждой сессии заново запрашивается информация по всем базам, и не заполняется поле сессии label

Надеюсь понятно описал ))

Некорректный entrypoint

В Dockerfile указан entrypoint
ENTRYPOINT ["/var/osp.net/artifact/core/linux-x64/OneScript.WebHost"]

Но на самом деле такого файла там нет, а есть файл:
ENTRYPOINT ["/var/osp.net/OneScript.WebHost"]

Не могу настроить hirac

Не могу настроить hirac, действую по инструкции, конфиг дефолтный, через rac.exe и irac - работает, опрашивается.
Пробовал на Windows и Linux.
Пробовал разные релизы 1с, в данный момент 8.3.22.1709.
Оскрипт - 1.8.3.
OneScript.Web 0.9.1.

При попытке обратиться по ссылке http://127.0.0.1:5005/cluster/list заканчивается ошибкой:

`
An unhandled exception occurred while processing the request.
RuntimeException: {Модуль C:\Users\user\Desktop\1c\hirac\src\oscript_modules\fluent\src\internal\Модули\ПроцессорыКоллекцийСлужебный.os / Ошибка в строке: 115 / Неверное значение аргумента}
ЭтоФункция = Интерфейс.ПолучитьКартуИнтерфейса()[0].ЭтоФункция;

ScriptEngine.HostedScript.Library.ValueTable.ValueTable.Get(int index)

Stack Query Cookies Headers Routing 

RuntimeException: {Модуль C:\Users\user\Desktop\1c\hirac\src\oscript_modules\fluent\src\internal\Модули\ПроцессорыКоллекцийСлужебный.os / Ошибка в строке: 115 / Неверное значение аргумента} ЭтоФункция = Интерфейс.ПолучитьКартуИнтерфейса()[0].ЭтоФункция;
    ScriptEngine.HostedScript.Library.ValueTable.ValueTable.Get(int index)
    ScriptEngine.HostedScript.Library.ValueTable.ValueTable.GetIndexedValue(IValue index)
    ScriptEngine.Machine.Variable+VariableReference.get_DataType()
    ScriptEngine.Machine.MachineInstance.ResolveProp(int arg)
    ScriptEngine.Machine.MachineInstance.MainCommandLoop()
    ScriptEngine.Machine.MachineInstance.ExecuteCode()
    ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, int methodIndex, IValue[] arguments)
    ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallAsFunction(int methodNumber, IValue[] arguments, out IValue retValue)
    ScriptEngine.Machine.MachineInstance.ResolveMethodFunc(int arg)
    ScriptEngine.Machine.MachineInstance.MainCommandLoop()
    ScriptEngine.Machine.MachineInstance.ExecuteCode()
    ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, int methodIndex, IValue[] arguments)
    ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallScriptMethod(int methodIndex, IValue[] parameters)
    ScriptEngine.Machine.Contexts.UserScriptContextInstance.OnInstanceCreation()
    ScriptEngine.Machine.Contexts.AttachedScriptsFactory.ScriptFactory(string typeName, IValue[] arguments)
    ScriptEngine.Machine.MachineInstance.NewInstance(int argCount)
    ScriptEngine.Machine.MachineInstance.MainCommandLoop()
    ScriptEngine.Machine.MachineInstance.ExecuteCode()
    ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, int methodIndex, IValue[] arguments)
    ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallAsFunction(int methodNumber, IValue[] arguments, out IValue retValue)
    ScriptEngine.Machine.MachineInstance.ResolveMethodFunc(int arg)
    ScriptEngine.Machine.MachineInstance.MainCommandLoop()
    ScriptEngine.Machine.MachineInstance.ExecuteCode()
    ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, int methodIndex, IValue[] arguments)
    ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallAsFunction(int methodNumber, IValue[] arguments, out IValue retValue)
    ScriptEngine.Machine.MachineInstance.ResolveMethodFunc(int arg)
    ScriptEngine.Machine.MachineInstance.MainCommandLoop()
    ScriptEngine.Machine.MachineInstance.ExecuteCode()
    ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, int methodIndex, IValue[] arguments)
    ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallScriptMethod(int methodIndex, IValue[] parameters)
    ScriptEngine.Machine.Contexts.UserScriptContextInstance.OnInstanceCreation()
    ScriptEngine.Machine.Contexts.AttachedScriptsFactory.ScriptFactory(string typeName, IValue[] arguments)
    ScriptEngine.Machine.MachineInstance.NewInstance(int argCount)
    ScriptEngine.Machine.MachineInstance.MainCommandLoop()
    ScriptEngine.Machine.MachineInstance.ExecuteCode()
    ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, int methodIndex, IValue[] arguments)
    ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallScriptMethod(int methodIndex, IValue[] parameters)
    ScriptEngine.Machine.Contexts.UserScriptContextInstance.OnInstanceCreation()
    ScriptEngine.Machine.Contexts.AttachedScriptsFactory.ScriptFactory(string typeName, IValue[] arguments)
    ScriptEngine.Machine.MachineInstance.NewInstance(int argCount)
    ScriptEngine.Machine.MachineInstance.MainCommandLoop()
    ScriptEngine.Machine.MachineInstance.ExecuteCode()
    ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, int methodIndex, IValue[] arguments)
    ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallScriptMethod(int methodIndex, IValue[] parameters)
    ScriptEngine.Machine.Contexts.UserScriptContextInstance.OnInstanceCreation()
    ScriptEngine.Machine.Contexts.AttachedScriptsFactory.ScriptFactory(string typeName, IValue[] arguments)
    ScriptEngine.Machine.MachineInstance.NewInstance(int argCount)
    ScriptEngine.Machine.MachineInstance.MainCommandLoop()
    ScriptEngine.Machine.MachineInstance.ExecuteCode()
    ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, int methodIndex, IValue[] arguments)
    ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallAsFunction(int methodNumber, IValue[] arguments, out IValue retValue)
    ScriptEngine.Machine.MachineInstance.ResolveMethodFunc(int arg)
    ScriptEngine.Machine.MachineInstance.MainCommandLoop()
    ScriptEngine.Machine.MachineInstance.ExecuteCode()
    ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, int methodIndex, IValue[] arguments)
    ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallAsFunction(int methodNumber, IValue[] arguments, out IValue retValue)
    ScriptEngine.Machine.Contexts.ReflectedMethodInfo.InvokeDirect(IRuntimeContextInstance instance, IValue[] parameters)
    OneScript.WebHost.Application.ScriptedController.ResultAction() in ScriptedController.cs
    lambda_method(Closure , object , object[] )
    Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(object target, object[] parameters)
    Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor+SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments)
    Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Logged|12_1(ControllerActionInvoker invoker)
    Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
    Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
    Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
    Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
    Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
    Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
    Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
    Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()
    Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)
    Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
    Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

`

ЧЯДНТ?

Проблема с запуском в kubernetes

При запуске образа в k8s (версия 1.20, рантайм containerd) возникает проблема:

Unhandled exception. ScriptEngine.Compiler.SymbolNotFoundException: {Модуль /app/model/modules/ПодключенияКАгентам.os / Ошибка в строке: 34,37 / Неизвестный символ: ТипыОбъектовКластера}
        ПоляОбъекта = ТипыОбъектовКластера.СвойстваОбъекта(ТипОбъекта);

проблема возникает при инициализации пода, то есть под (контейнер) падает.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.