Превышение скорости в опросе workflow_execution

В настоящее время я пытаюсь изменить плагин для публикации метрик в new-relic через AWS. Мне удалось заставить плагин публиковать метрики из swf в новую реликвию (изначально не в плагине), но столкнулся с проблемой, если программа работает слишком долго.

Когда программа работает около 10 минут, я получаю следующую ошибку:

Error occurred in poll cycle: Rate exceeded

Я полагаю, что это исходит от моего SWF-опроса для выполнения рабочего процесса.

domain.workflow_executions.each do |execution|

        starttime = execution.started_at
        endtime = execution.closed_at
        isOpen = execution.open?
        status = execution.status

        if endtime != nil
          running_workflow_runtime_total += (endtime - starttime)
          number_of_completed_executions += 1
        end

        if status.to_s == "open"
          openCount = openCount + 1
        elsif status.to_s == "completed"
          completedCount = completedCount + 1
        elsif status.to_s == "failed"
          failedCount = failedCount + 1
        elsif status.to_s == "timed_out"
          timed_outCount = timed_outCount + 1
        end

      end

Это вызывается в цикле опроса каждые 60 секунд.

Есть ли способ установить частоту опроса? Или другой способ получить выполнение рабочего процесса?

Спасибо, вот ссылка на ruby ​​sdk для swf => ссылка


person user2495753    schedule 18.07.2013    source источник
comment
Нам на самом деле не с чего работать, потому что вы дали нам только самое начало вашего цикла. См. sscce.org для получения информации, которая нам нужна, чтобы помочь вам.   -  person the Tin Man    schedule 18.07.2013
comment
Спасибо за комментарий и предложение. Я обновил код, дайте мне знать, если это более полезно.   -  person user2495753    schedule 18.07.2013


Ответы (1)


Проблема, скорее всего, в том, что вы создаете большое количество выполнений рабочего процесса, и каждая итерация цикла в workflow_executions вызывает поиск, который в конечном итоге превышает ваш предел скорости.

Это также может стать немного дороже, так что будьте осторожны.

Непонятно, что вы на самом деле пытаетесь сделать, поэтому я не могу сказать вам, как это исправить, если вы не опубликуете весь свой код (или части, связанные с вызовами SWF).

Вы можете увидеть здесь:

https://github.com/aws/aws-sdk-ruby/blob/05d15cd1b6037e98f2db45f8c2597014ee376a59/lib/aws/simple_workflow/workflow_execution_collection.rb

Вызов SWF для каждого рабочего процесса в коллекции.

person xaxxon    schedule 18.07.2013
comment
Но я не думаю, что в этом цикле я создаю еще какие-либо рабочие процессы, а только просматриваю те, которые выполняются в данный момент. Это также единственная часть моего кода, в которой я что-то делаю с указанным выполнением рабочего процесса. Влияет ли количество казней, которые я ищу, на мой предел? или ограничение основано на общем количестве широких поисков, которые я делаю? - person user2495753; 18.07.2013
comment
Всех сразу не тянет. Я предполагаю, что каждая итерация вашего тела кода в {} вызывает вызов SWF для получения данных для следующего выполнения. Это количество выполнений, умноженное на количество вызовов domain.workflow_executions.each. - person xaxxon; 18.07.2013