как объединить несколько объектов orion в один набор данных ckan с помощью cygnus?

Прямо сейчас я пытаюсь создать набор данных для моих данных orion со всей информацией о сущностях. Я все настроил правильно, и когда какие-то данные изменяются, orion отправляет уведомление cygnus, а затем cygnus добавит данные в ckan. Как видно на этом изображении.

Моя архитектура

Проблема в том, что cygnus создает ресурс ckan для каждой сущности. Что я мог сделать, чтобы cygnus поместил все данные только в один ресурс? Спасибо.

ИЗМЕНИТЬ 1:

Я только что обнаружил, что могу упростить, сделав всего одну подписку в orion.

{
    "entities": [
        {
            "type": "Room",
            "isPattern": "true",
            "id": "Room.*"
        }
    ] ...

Затем я заметил функцию группировки (http://fiware-cygnus.readthedocs.io/en/develop/installation_and_administration_guide/grouping_rules_conf/index.html=) в cygnus, но сейчас я потерялся, потому что cygnus не хочет загружать мой файл конфигурации группировки. Он показывает эту ошибку:

time=2016-05-03T05:32:29.658CDT | lvl=INFO | trans= | srv= | subsrv= | function=<init> | comp=Cygnus | msg=com.telefonica.iot.cygnus.interceptors.GroupingRules[58] : No grouping rules have been read
Exception in thread "Thread-1" java.lang.NullPointerException
    at java.io.File.<init>(File.java:277)
    at com.telefonica.iot.cygnus.interceptors.GroupingInterceptor$ConfigurationReader.run(GroupingInterceptor.java:244)

В моем файле конфигурации агента у меня есть:

cygnusagent.sources.http-source.interceptors.gi.gropuing_rules_conf_file = /usr/cygnus/conf/grouping_rules.conf

И в grouping_rules.conf:

{
    "grouping_rules": [
        {
            "id": 1,
            "fields": [
                "entityId"
            ],
            "regex": "room.*",
            "destination": "Rooms",
            "fiware_service_path": "/myhouse"
        }
    ]
}

Редактировать 2:

У меня есть все строки, как сказано в документации:

    cygnusagent.sources = http-source
    cygnusagent.sinks = ckan-sink
    cygnusagent.channels = ckan-channel

    cygnusagent.sources.http-source.channels = ckan-channel
    cygnusagent.sources.http-source.type = org.apache.flume.source.http.HTTPSource
    cygnusagent.sources.http-source.port = 5050
    cygnusagent.sources.http-source.handler = com.telefonica.iot.cygnus.handlers.OrionRestHandler
    cygnusagent.sources.http-source.handler.notification_target = /notify
    cygnusagent.sources.http-source.handler.default_service = test
    cygnusagent.sources.http-source.handler.default_service_path = /myhouse
    cygnusagent.sources.http-source.handler.events_ttl = 5
    cygnusagent.sources.http-source.interceptors = ts gi
    cygnusagent.sources.http-source.interceptors.ts.type = timestamp
    cygnusagent.sources.http-source.interceptors.gi.type = com.telefonica.iot.cygnus.interceptors.GroupingInterceptor$Builder
    cygnusagent.sources.http-source.interceptors.gi.gropuing_rules_conf_file = /usr/cygnus/conf/grouping_rules.conf
cygnusagent.channels.ckan-channel.type = memory
cygnusagent.channels.ckan-channel.capacity = 1000
cygnusagent.channels.ckan-channel.transactionCapacity = 100

# ============================================
# OrionCKANSink configuration
# channel name from where to read notification events
cygnusagent.sinks.ckan-sink.channel = ckan-channel

# sink class, must not be changed
cygnusagent.sinks.ckan-sink.type = com.telefonica.iot.cygnus.sinks.OrionCKANSink

# true if the grouping feature is enabled for this sink, false otherwise
cygnusagent.sinks.ckan-sink.enable_grouping = true

# true if lower case is wanted to forced in all the element names, false otherwise
cygnusagent.sinks.hdfs-sink.enable_lowercase = false

# the CKAN API key to use
cygnusagent.sinks.ckan-sink.api_key = 436fffc8-b397-478a-92fd-bbc5ffaf8269

# the FQDN/IP address for the CKAN API endpoint
cygnusagent.sinks.ckan-sink.ckan_host = ckan-demo.ckan.io

# the port for the CKAN API endpoint
cygnusagent.sinks.ckan-sink.ckan_port = 80

# Orion URL used to compose the resource URL with the convenience operation URL to query it
cygnusagent.sinks.ckan-sink.orion_url = http://localhost:1026

# how the attributes are stored, either per row either per column (row, column)
cygnusagent.sinks.ckan-sink.attr_persistence = column

# enable SSL for secure Http transportation; 'true' or 'false'
cygnusagent.sinks.ckan-sink.ssl = false

# number of notifications to be included within a processing batch
cygnusagent.sinks.ckan-sink.batch_size = 100

# timeout for batch accumulation
cygnusagent.sinks.ckan-sink.batch_timeout = 60

# number of retries upon persistence error
cygnusagent.sinks.ckan-sink.batch_ttl = 10

Права на файл мне кажутся нормальными:

[root@VM013cen-Prod conf]# ls *.conf -l
-rwxrwxrwx 1 cygnus cygnus 2675 may  3 06:45 agent_test.conf
-rwxrwxrwx 1 cygnus cygnus  258 may  3 05:08 grouping_rules.conf
-rwxr-xr-x 1 cygnus cygnus  135 mar  1 02:50 krb5_login.conf

Тест проходит нормально:

Results :

Tests run: 80, Failures: 0, Errors: 0, Skipped: 0

    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 1:05.862s
    [INFO] Finished at: Tue May 03 06:53:44 CDT 2016
    [INFO] Final Memory: 41M/105M
    [INFO] ------------------------------------------------------------------------

Команда запуска, которую я использую: /usr/cygnus/bin/cygnus-flume-ng agent --conf /usr/cygnus/conf/ -f /usr/cygnus/conf/agent_test.conf -n cygnusagent -Dflume.root.logger=INFO,console


person Mario Corral    schedule 28.04.2016    source источник


Ответы (1)


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

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

cygnusagent.sources.http-source.interceptors.gi.gropuing_rules_conf_file = /usr/cygnus/conf/grouping_rules.conf

Можете ли вы подтвердить перед этой строкой, что у вас есть что-то подобное?

cygnus-ngsi.sources.http-source.interceptors = ts gi
cygnus-ngsi.sources.http-source.interceptors.ts.type = timestamp
cygnus-ngsi.sources.http-source.interceptors.gi.type = com.telefonica.iot.cygnus.interceptors.GroupingInterceptor$Builder

Кроме того, можете ли вы проверить разрешения /usr/cygnus/conf/grouping_rules.conf? Возможно, он не может быть прочитан пользователем, использующим Cygnus.

Что касается правила, новый путь службы FIWARE должен начинаться с /, поскольку все пути службы FIWARE должны начинаться с косой черты (я думаю, что это не задокументировано должным образом в последней версии).

ХТХ!

ИЗМЕНИТЬ 1:

Я думаю, что нашел проблему. Настроенное имя параметра — «...gropuing...», а правильное — «...grouping...» :)

person frb    schedule 03.05.2016
comment
Я отредактировал вопрос с дополнительной информацией. Я также изменил путь службы, добавив /. Проблема сохраняется не знаю почему. Спасибо за ответ. - person Mario Corral; 03.05.2016
comment
Какая версия Cygnus у вас установлена? Не могли бы вы добавить pastebin со всеми логами запуска Cygnus, пожалуйста? Меня интересуют следы, написанные с самого начала процесса. - person frb; 03.05.2016
comment
МОЙ БОГ! Я такой идиот. Большое спасибо. Пожалуйста, исправьте это в документе, чтобы другие люди не запутались. Вот URL-адрес fiware-cygnus. readthedocs.io/en/latest/quick_start_guide/ где я получил неправильную конфигурацию. - person Mario Corral; 03.05.2016
comment
Не твоя вина, а моя :) Поправлю док. - person frb; 03.05.2016