1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/forview-storm

Клонировать/Скачать
STORM-UI-REST-API.md 32 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 24.06.2025 03:21 f4d009d

REST API для Storm UI

Демон Storm UI предоставляет REST API, которое позволяет взаимодействовать с кластером Storm, включая получение метрик данных и конфигурационной информации, а также операции управления, такие как запуск или остановка топологий.

Формат данных

REST API возвращает ответы в формате JSON и поддерживает JSONP. Клиенты могут передавать параметр запроса callback для обёртки JSON в функцию обратного вызова.

Использование REST API для Storm UI

Примечание: Рекомендуется игнорировать незадокументированные элементы в ответе JSON, так как будущие версии Storm могут больше не поддерживать эти элементы.

Основной URL REST API

REST API является частью демона UI Storm (запускается командой storm ui) и поэтому работает на том же хосте и порту, что и Storm UI (демон UI часто запускается на том же хосте, что и демон Nimbus). Порт настраивается параметром ui.port, который по умолчанию установлен на 8080 (см. defaults.yaml).

Основной URL API будет таким:

http://<ui-host>:<ui-port>/api/v1/...

Вы можете использовать инструмент, такой как curl, чтобы общаться с REST API:

# Получить конфигурацию кластера.
# Примечание: Мы предполагаем, что ui.port настроен на значение по умолчанию 8080.
$ curl http://<ui-host>:8080/api/v1/cluster/configuration## Подмена пользователя в защищённой среде

В защищённой среде аутентифицированный пользователь может подменяться другим пользователем. Для подмены пользователя отправитель должен передать параметр doAsUser или заголовок с значением, установленным на пользователя, от имени которого требуется выполнить запрос. Дополнительную информацию о настройке правил подмены и авторизации см. в SECURITY.MD. REST API использует те же конфигурации и ACLs, что и Nimbus.Примеры:

 1. http://ui-daemon-host-name:8080/api/v1/topology/wordcount-1-1425844354\?doAsUser=testUSer1
 2. curl 'http://localhost:8080/api/v1/topology/wordcount-1-1425844354/activate' -X POST -H 'doAsUser:testUSer1'

Операции GET

/api/v1/cluster/configuration (GET)

Возвращает конфигурацию кластера.

Пример ответа (не включает все поля данных):

{
    "dev.zookeeper.path": "/tmp/dev-storm-zookeeper",
    "topology.tick.tuple.freq.secs": null,
    "topology.builtin.metrics.bucket.size.secs": 60,
    "topology.fall.back.on.java.serialization": true,
    "topology.max.error.report.per.interval": 5,
    "zmq.linger.millis": 5000,
    "topology.skip.missing.kryo.registrations": false,
    "storm.messaging.netty.client_worker_threads": 1,
    "ui.childopts": "-Xmx768m",
    "storm.zookeeper.session.timeout": 20000,
    "nimbus.reassign": true,
    "topology.trident.batch.emit.interval.millis": 500,
    "storm.messaging.netty.flush.check.interval.ms": 10,
    "nimbus.monitor.freq.secs": 10,
    "logviewer.childopts": "-Xmx128m",
    "java.library.path": "/usr/local/lib:/opt/local/lib:/usr/lib",
    "topology.executor.send.buffer.size": 1024
}

/api/v1/cluster/summary (GET)

Возвращает сводную информацию о кластере, такую как время работы Nimbus или количество супервизоров.

Поля ответа:

Поле Значение Описание
stormVersion Строка Версия Storm
nimbusUptime Строка Время работы Nimbus
supervisors Целое число Количество работающих супервизоров
topologies Целое число Количество работающих топологий
slotsTotal Целое число Общее количество доступных слотов рабочих процессов
slotsUsed Целое число Количество используемых слотов рабочих процессов
slotsFree Целое число Количество свободных слотов рабочих процессов
executorsTotal Целое число Общее количество исполнителей
tasksTotal Целое число Общее количество задач
{
    "stormVersion": "0.9.2-incubating-SNAPSHOT",
    "nimbusUptime": "3m 53s",
    "supervisors": 1,
    "slotsTotal": 4,
    "slotsUsed": 3,
    "slotsFree": 1,
    "executorsTotal": 28,
    "tasksTotal": 28
}

/api/v1/supervisor/summary (GET)

Возвращает сводную информацию обо всех супервизорах.

Поля ответа:

Поле Значение Описание
id Строка Идентификатор супервизора
host Строка Имя хоста супервизора
uptime Строка Отображает, сколько времени работает супервизор
slotsTotal Целое число Общее количество доступных слотов рабочих процессов для данного супервизора
slotsUsed Целое число Количество используемых слотов рабочих процессов для данного супервизора
slotsFree Целое число Количество свободных слотов рабочих процессов для данного супервизора

Пример ответа:

{
    "supervisors": [
        {
            "id": "0b879808-2a26-442b-8f7d-23101e0c3696",
            "host": "10.11.1.7",
            "uptime": "5m 58s",
            "slotsTotal": 4,
            "slotsUsed": 3,
            "slotsFree": 1
        }
    ]
}

/api/v1/topology/summary (GET)

Возвращает сводную информацию обо всех топологиях.

Поля ответа:

Поле Значение Описание
id Строка Идентификатор топологии
name Строка Название топологии
status Строка Состояние топологии
uptime Строка Отображает, сколько времени работает топология
tasksTotal Целое число Общее количество задач для данной топологии
workersTotal Целое число Количество используемых рабочих процессов для данной топологии
executorsTotal Целое число Количество используемых исполнителей для данной топологии
{
"topologies": [
    {
        "id": "WordCount3-1-1402960825",
        "name": "WordCount3",
        "status": "ACTIVE",
        "uptime": "6m 5s",
        "tasksTotal": 28,
        "workersTotal": 3,
        "executorsTotal": 28
    }
]

}


Возвращает информацию о топологии и статистику. Замените `id` на идентификатор топологии.

Параметры запроса:

|Параметр |Значение   |Описание  |
|---------|-----------|----------|
|id       |Строка (обязательный)| Идентификатор топологии  |
|window   |Строка. Значение по умолчанию: all-time| Продолжительность окна для метрик в секундах|
|sys      |Строка. Значения: 1 или 0. Значение по умолчанию: 0| Управляет включением части статистики системы в ответ|
```Поля ответа:|Поле|Значение|Описание|
 |---|---|---|
 |id|String|Идентификатор топологии|
 |name|String|Название топологии|
 |uptime|String|Время работы топологии|
 |status|String|Текущий статус топологии, например "АКТИВНАЯ"|
 |tasksTotal|Integer|Общее количество задач для данной топологии|
 |workersTotal|Integer|Количество рабочих процессов, используемых для данной топологии|
 |executorsTotal|Integer|Количество исполнителей, используемых для данной топологии|
 |msgTimeout|Integer|Количество секунд, в течение которых тьюпл считается действительным перед тем, как спаут будет считать его неудачным|
 |windowHint|String|Значение параметра окна в формате "чч мм сс".  По умолчанию значение равно "Все время"|
 |topologyStats|Массив|Массив всех статистических данных, связанных с топологией, по каждому временному окну|
 |topologyStats.windowPretty|String|Продолжительность в формате HH:MM:SS|
 |topologyStats.window|String|Запрошенное пользователем временное окно для метрик|
 |topologyStats.emitted|Long|Количество отправленных сообщений за данное окно|
 |topologyStats.transferred|Long|Количество переданных сообщений за данное окно|
 |topologyStats.completeLatency|String (значение типа double возвращается в формате строки)|Общее время задержки при обработке сообщения|
 |topologyStats.acked|Long|Количество подтвержденных сообщений за данное окно|
 |topologyStats.failed|Long|Количество неудачных сообщений за данное окно|
 |spouts|Массив|Массив всех компонентов спаута в топологии|
 |spouts.spoutId|String|Идентификатор спаута|
 |spouts.|```markdown
executors|Integer|Количество исполнителей для данного спаута|
spouts.emitted|Long|Количество отправленных сообщений за данное окно|
spouts.completeLatency|String (значение типа double возвращается в формате строки)|Общее время задержки при обработке сообщения|
spouts.transferred|Long|Общее количество переданных сообщений за данное окно|
spouts.tasks|Integer|Общее количество задач для данного спаута|
spouts.lastError|String|Отображает последнюю ошибку, произошедшую в данном спауте|
spouts.errorLapsedSecs|Integer|Количество секунд, прошедших с момента последней ошибки в данном спауте|
spouts.errorWorkerLogLink|String|Ссылка на журнал рабочего процесса, который сообщил об ошибке|
spouts.acked|Long|Количество подтвержденных сообщений|
spouts.failed|Long|Количество неудачных сообщений|
bolts|Массив|Массив компонентов болта в топологии|
bolts.boltId|String|Идентификатор болта|
bolts.capacity|String (значение типа double возвращается в формате строки)|Это значение указывает на количество сообщений, выполненных * среднее время выполнения / временной интервал|
bolts.processLatency|String (значение типа double возвращается в виде строки)|Среднее время, затраченное болтом на подтверждение сообщения после его получения|
bolts.executeLatency|String (значение типа double возвращается в виде строки)|Среднее время выполнения метода execute болтом|
bolts.executors|Integer|Количество задач-исполнителей в компоненте болта|
bolts.tasks|Integer|Количество экземпляров болта|

acked| Long |Количество подтвержденных кортежей| |bolts.failed| Long |Количество неудачных кортежей| |bolts.lastError| String |Показывает последнюю ошибку, произошедшую в болне| |bolts.errorLapsedSecs| Integer |Количество секунд, прошедших с момента последней ошибки в болне| |bolts.errorWorkerLogLink| String |Ссылка на лог работы, который сообщил об исключении| |bolts.emitted| Long |Количество выданных кортежей|Примеры:```no-highlight

  1. http://ui-daemon-host-name:8080/api/v1/topology/WordCount3-1-1402960825
  2. http://ui-daemon-host-name:8080/api/v1/topology/WordCount3-1-1402960825?sys=1
  3. http://ui-daemon-host-name:8080/api/v1/topology/WordCount3-1-1402960825?window=600
{
    "name": "WordCount3",
    "id": "WordCount3-1-1402960825",
    "workersTotal": 3,
    "window": "600",
    "status": "АКТИВНАЯ",
    "tasksTotal": 28,
    "executorsTotal": 28,
    "uptime": "29м 19с",
    "msgTimeout": 30,
    "windowHint": "10м 0с",
    "topologyStats": [
        {
            "windowPretty": "10м 0с",
            "window": "600",
            "emitted": 397960,
            "transferred": 213380,
            "completeLatency": "0. 000",
            "acked": 213460,
            "failed": 0
        },
        {
            "windowPretty": "3ч 0м 0с",
            "window": "10800",
            "emitted": 1190260,
            "transferred": 638260,
            "completeLatency": "0. 000",
            "acked": 638280,
            "failed": 0
        },
        {
            "windowPretty": "1д 0ч 0м 0с",
            "window": "86400",
            "emitted": 1190260,
            "transferred": 638260,
            "completeLatency": "0. 000",
            "acked": 638280,
            "failed": 0
        },
        {
            "windowPretty": "За всё время",
            "window": ":all-time",
            "emitted": 1190260,
            "transferred": 638260,
            "completeLatency": "0. 000",
            "acked": 638280,
            "failed": 0
        }
    ],
    "spouts": [
        {
            "executors": 5,
            "emitted": 28880,
            "completeLatency": "0. 000",
            "transferred": 28880,
            "acked": 0,
            "spoutId": "spout",
            "tasks": 5,
            "lastError": "",
            "errorLapsedSecs": null,
            "failed": 0
        }
    ],
    "bolts": [
        {
            "executors": 12,
            "emitted": 184580,
            "transferred": 0,
            "acked": 184640,
            "executeLatency": "0. 048",
            "tasks": 12,
            "executed": 184620,
            "processLatency": "0. 043",
            "boltId": "count",
            "lastError": "",
            "errorLapsedSecs": null,
            "capacity": "0. 003",
            "failed": 0
        },
        {
            "executors": 8,
            "emitted": 184500,
            "transferred": 184500,
            "acked": 28820,
            "executeLatency": "0. 024",
            "tasks": 8,
            "executed": 28780,
``````json
{
    "processLatency": "2.112",
    "boltId": "split"
}
```

```markdown
LastError: ""
ErrorLapsedSecs: null
Capacity: "0.000"
Failed: 0
]
},
"configuration": {
    "storm.id": "WordCount3-1-1402960825",
    "dev.zookeeper.path": "/tmp/dev-storm-zookeeper",
    "topology.tick.tuple.freq.secs": null,
    "topology.builtin.metrics.bucket.size.secs": 60,
    "topology.fall.back.on.java.serialization": true,
    "topology.max.error.report.per.interval": 5,
    "zmq.linger.millis": 5000,
    "topology.skip.missing.kryo.registrations": false,
    "storm.messaging.netty.client_worker_threads": 1,
    "ui.childopts": "-Xmx768m",
    "storm.zookeeper.session.timeout": 20000,
    "nimbus.reassign": true,
    "topology.trident.batch.emit.interval.millis": 500,
    "storm.messaging.netty.flush.check.interval.ms": 10,
    "nimbus.monitor.freq.secs": 10,
    "logviewer.childopts": "-Xmx128m",
    "java.library.path": "/usr/local/lib:/opt/local/lib:/usr/lib",
    "topology.executor.send.buffer.size": 1024,
    "storm.local.dir": "storm-local",
    "storm.messaging.netty.buffer_size": 5242880,
    "supervisor.worker.start.timeout.secs": 120,
    "topology.enable.message.timeouts": true,
    "nimbus.cleanup.inbox.freq.secs": 600,
    "nimbus.inbox.jar.expiration.secs": 3600,
    "drpc.worker.threads": 64,
    "topology.worker.shared.thread.pool.size": 4,
    "nimbus.host": "hw10843.local",
    "storm.messaging.netty.min_wait_ms": 100,
    "storm.zookeeper.port": 2181,
    "transactional.zookeeper.port": null,
    "topology.executor.receive.buffer.size": 1024,
    "transactional.zookeeper.servers": null,
    "storm.zookeeper.root": "/storm",
    "storm.zookeeper.retry.intervalceiling.millis": 30000,
    "supervisor.enable": true,
    "storm.messaging.netty.server_worker_threads": 1
}
```

### /api/v1/topology/:id/компонент/:component (GET)Возвращает детальные метрики и информацию об исполнителе

|Параметр |Значение   |Описание  |
|---------|-----------|----------|
|id       |Строка (обязательно)| ID топологии  |
|component|Строка (обязательно)| ID компонента |
|window   |Строка. Значение по умолчанию :all-time| продолжительность окна для метрик в секундах|
|sys      |Строка. Значения 1 или 0. Значение по умолчанию 0| управляет включением части ответа с системными данными|Поля ответа:|Поле  |Значение |Описание|
 |---	|---	|---
 |id   | String | ID компонента|
 |name | String | Название топологии|
 |componentType | String | тип компонента: SPOUT или BOLT|
 |windowHint| String | значение параметра окна в формате "чч мм сс". Значение по умолчанию - "All Time"|
 |executors| Integer | Количество задач выполнителя в компоненте|
 |componentErrors| Массив ошибок | Список ошибок компонента|
 |componentErrors.time| Long | Временная метка, когда произошло исключение |
 |componentErrors.errorHost| String | имя хоста для ошибки|
 |componentErrors.errorPort| String | порт для ошибки|
 |componentErrors.error| String | Ошибка, произошедшая в компоненте|
 |componentErrors.errorLapsedSecs| Integer | Количество секунд, прошедших с момента возникновения ошибки в компоненте |
 |componentErrors.errorWorkerLogLink| String | Ссылка на журнал рабочего процесса, который сообщил об исключении |
 |topologyId| String | ID топологии|
 |tasks| Integer | Количество экземпляров компонента|
 |window| String. Значение по умолчанию "All Time" | продолжительность окна для метрик в секундах|
 |spoutSummary или boltStats| Массив | Массив статистики компонента. **Обратите внимание, что этот элемент может быть spoutSummary или boltStats в зависимости от значения componentType**|
 |spoutSummary.windowPretty| String | Продолжительность в формате ЧЧ:ММ:СС|
 |spoutSummary.window| String | продолжительность окна для метрик в секундах|
 |spoutSummary.emitted| Long | Количество отправленных сообщений в данном окне |
 |spoutSummary.completeLatency| String (значение типа double возвращается в формате строки) | Общее время задержки при обработке сообщения|transferred| Long | Общее количество переданных сообщений в данном окне|
 |spoutSummary.acked| Long | Количество подтвержденных сообщений|
 |spoutSummary.failed| Long | Количество неудачных сообщений|
 |boltStats.windowPretty| String | Продолжительность в формате ЧЧ:ММ:СС|
 |boltStats.window| String | Продолжительность окна для метрик в секундах|
 |boltStats.transferred| Long | Общее количество переданных сообщений в данном окне|
 |boltStats.processLatency| String (значение типа double возвращается в формате строки) | Среднее время, затраченное болном на подтверждение сообщения после его получения|
 |boltStats.acked| Long | Количество подтвержденных сообщений|
 |boltStats.failed| Long | Количество неудачных сообщений|```no-highlight
1. http://ui-daemon-host-name:8080/api/v1/topology/WordCount3-1-1402960825/component/spout
2. http://ui-daemon-host-name:8080/api/v1/topology/WordCount3-1-1402960825/component/spout?sys=1
3. http://ui-daemon-host-name:8080/api/v1/topology/WordCount3-1-1402960825/component/spout?window=600
``````json
{
    "name": "WordCount3",
    "id": "spout",
    "componentType": "spout",
    "windowHint": "10m 0s",
    "executors": 5,
    "componentErrors": [{
        "time": 1406006074000,
        "errorHost": "10. 11. 1. 70",
        "errorPort": 6701,
        "errorWorkerLogLink": "http://10. 11. 1. 7:8000/log?file=worker-6701.log",
        "errorLapsedSecs": 16,
        "error": "java.lang.RuntimeException: java.lang.StringIndexOutOfBoundsException: Some Error\n\tat backtype.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:128)\n\tat backtype.storm.utils.DisruptorQueue.consumeBatchWhenAvailable(DisruptorQueue.java:99)\n\tat backtype.storm.disruptor$consume_batch_when_available.invoke(disruptor.clj:80)\n\tat backtype.storm.disruptor$consume_batch_when_available.invoke(disruptor.clj:80)"
    }],
    "topologyId": "WordCount3-1-1402960825",
    "tasks": 5,
    "window": "600",
    "spoutSummary": [
        {
            "windowPretty": "10m 0s",
            "window": "600",
            "emitted": 28500,
            "transferred": 28460,
            "completeLatency": "0.000",
            "acked": 0,
            "failed": 0
        },
        {
            "windowPretty": "3h 0m 0s",
            "window": "10800",
            "emitted": 127640,
            "transferred": 127440,
            "completeLatency": "0.000",
            "acked": 0,
            "failed": 0
        },
        {
            "windowPretty": "1d 0h 0m 0s",
            "window": "86400",
            "emitted": 127640,
            "transferred": 127440,
            "completeLatency": "0.000",
            "acked": 0,
            "failed": 0
        },
        {
            "windowPretty": "All time",
            "window": ":all-time",
            "emitted": 127640,
            "transferred": 127440,
            "completeLatency": "0.000",
            "acked": 0,
            "failed": 0
        }
    ],
    "outputStats": [
        {
            "stream": "__metrics",
            "emitted": 40,
            "transferred": 0,
            "completeLatency": "0",
            "acked": 0,
            "failed": 0
        },
        {
            "stream": "default",
            "emitted": 28460,
            "transferred": 28460,
            "completeLatency": "0",
            "acked": 0,
            "failed": 0
        }
    ],
    "executorStats": [
        {
``````yaml
{
  "workers": [
    {
      "workerLogLink": "http://10.11.1.7:8000/log?file=worker-6701.log",
      "emitted": 5720,
      "port": 6701,
      "completeLatency": "0.000",
      "transferred": 5720,
      "host": "10.11.1.7",
      "acked": 0,
      "uptime": "43m 4s",
      "id": "[24-24]",
      "failed": 0
    },
    {
      "workerLogLink": "http://10.11.1.7:8000/log?file=worker-6703.log",
      "emitted": 5700,
      "port": 6703,
      "completeLatency": "0.000",
      "transferred": 5700,
      "host": "10.11.1.7",
      "acked": 0,
      "uptime": "42m 57s",
      "id": "[25-25]",
      "failed": 0
    },
    {
      "workerLogLink": "http://10.11.1.7:8000/log?file=worker-6702.log",
      "emitted": 5700,
      "port": 6702,
      "completeLatency": "0.000",
      "transferred": 5680,
      "host": "10.11.1.7",
      "acked": 0,
      "uptime": "42m 57s",
      "id": "[26-26]",
      "failed": 0
    },
    {
      "workerLogLink": "http://10.11.1.7:8000/log?file=worker-6701.log",
      "emitted": 5700,
      "port": 6701,
      "completeLatency": "0.000",
      "transferred": 5680,
      "host": "10.11.1.7",
      "acked": 0,
      "uptime": "43m 4s",
      "id": "[27-27]",
      "failed": 0
    },
    {
      "workerLogLink": "http://10.11.1.7:8000/log?file=worker-6703.log",
      "emitted": 5680,
      "port": 6703,
      "completeLatency": "0.000",
      "transferred": 5680,
      "host": "10.11.1.7",
      "acked": 0,
      "uptime": "42m 57s",
      "id": "[28-28]",
      "failed": 0
    }
  ]
}
```

## Операции POST### /api/v1/topology/:id/activate (POST)

Активирует топологию.

|Параметр |Значение   |Описание  |
|---------|-----------|----------|
|id       |Строка (обязательно)| Идентификатор топологии  |

Пример ответа:

```json
{"topologyOperation":"activate","topologyId":"wordcount-1-1420308665","status":"success"}
```


### /api/v1/topology/:id/deactivate (POST)

Деактивирует топологию.

|Параметр |Значение   |Описание  |
|---------|-----------|----------|
|id       |Строка (обязательно)| Идентификатор топологии  |

Пример ответа:

```json
{"topologyOperation":"deactivate","topologyId":"wordcount-1-1420308665","status":"success"}
```


### /api/v1/topology/:id/rebalance/:wait-time (POST)

Перераспределяет топологию.

|Параметр |Значение   |Описание  |
|---------|-----------|----------|
|id       |Строка (обязательно)| Идентификатор топологии  |
|wait-time| Строка (обязательно)| Время ожидания перед перераспределением  |
|rebalanceOptions| Json (необязательно) | Опции перераспределения топологии |

Пример JSON с опциями перераспределения:

```json
{"rebalanceOptions" : {"numWorkers" : 2, "executors" : {"spout" :4, "count" : 10}}, "callback" : "foo"}
```

Примеры:

```no-highlight
curl  -i -b ~/cookiejar.txt -c ~/cookiejar.txt -X POST  
-H "Content-Type: application/json" 
-d  '{"rebalanceOptions": {"numWorkers": 2, "executors": { "spout" : "5", "split": 7, "count": 5 }}, "callback":"foo"}' 
http://localhost:8080/api/v1/topology/wordcount-1-1420308665/rebalance/0
```

Пример ответа:

```json
{"topologyOperation":"rebalance","topologyId":"wordcount-1-1420308665","status":"success"}
```



### /api/v1/topology/:id/kill/:wait-time (POST)

Уничтожает топологию.

|Параметр |Значение   |Описание  |
|---------|-----------|----------|
|id       |Строка (обязательно)| Идентификатор топологии  |
|wait-time| Строка (обязательно)| Время ожидания перед уничтожением  |Внимание: Краткие периоды ожидания (0-5 секунд) могут увеличить вероятность активации ошибки, описанной в [STORM-112](https://issues.apache.org/jira/browse/STORM-112), что может привести к проблемам с демонами Supervisor брокера.

Пример ответа:

```json
{"topologyOperation":"kill","topologyId":"wordcount-1-1420308665","status":"success"}
```

## Ошибки API

API возвращает HTTP-статус 500 в случае возникновения ошибок.```json
{
  "error": "Внутренняя ошибка сервера",
  "errorMessage": "java.lang.NullPointerException\n\tat clojure.core$name.invoke(core.clj:1505)\n\tat backtype.storm.ui.core$component_page.invoke(core.clj:752)\n\tat backtype.storm.ui.core$fn__7766.invoke(core.clj:782)\n\tat compojure.core$make_route$fn__5755.invoke(core.clj:93)\n\tat compojure.core$if_route$fn__5743.invoke(core.clj:39)\n\tat compojure.core$if_method$fn__5736.invoke(core.clj:24)\n\tat compojure.core$routing$fn__5761.invoke(core.clj:106)\n\tat clojure.core$some.invoke(core.clj:2443)\n\tat compojure.core$routing.doInvoke(core.clj:106)\n\tat clojure.lang.RestFn.applyTo(RestFn.java:139)\n\tat clojure.core$apply.invoke(core.clj:619)\n\tat compojure.core$routes$fn__5765.invoke(core.clj:111)\n\tat ring.middleware.reload$wrap_reload$fn__6880.invoke(reload.clj:14)\n\tat backtype.storm.ui.core$catch_errors$fn__7800.invoke(core.clj:836)\n\tat ring.middleware.keyword_params$wrap_keyword_params$fn__6319.invoke(keyword_params.clj:27)\n\tat ring.middleware.nested_params$wrap_nested_params$fn__6358.invoke(nested_params.clj:65)\n\tat ring.middleware.params$wrap_params$fn__6291.invoke(params.clj:55)\n\tat ring.middleware.multipart_params$wrap_multipart_params$fn__6386.invoke(multipart_params.clj:103)\n\tat ring.middleware.flash$wrap_flash$fn__6675.invoke(flash.clj:14)\n\tat ring.middleware.session$wrap_session$fn__6664.invoke(session.clj:43)\n\tat ring.middleware.cookies$wrap_cookies$fn__6595.invoke(cookies.clj:160)\n\tat ring.adapter.jetty$proxy_handler$fn__6112.invoke(jetty.clj:16)\n\tat ring.adapter.jetty.proxy$org.mortbay.jetty.handler.AbstractHandler$0.handle(Unknown Source)\n\tat org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)\n\tat org.mortbay.jetty.Server.handle(Server.java:326)\n\tat org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)\n\tat org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928)\n\tat org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)\n\tat org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)\n\tat org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)\n\tat org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)\n\tat org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)\n"
}
```

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/forview-storm.git
git@api.gitlife.ru:oschina-mirror/forview-storm.git
oschina-mirror
forview-storm
forview-storm
master