|
| 1 | +module Travis::API::V3 |
| 2 | + class Services::Executions::ForOwnerPerRepo < Service |
| 3 | + params :from, :to |
| 4 | + result_type :executions_per_repo |
| 5 | + |
| 6 | + def run! |
| 7 | + raise MethodNotAllowed if Travis.config.org? |
| 8 | + raise LoginRequired unless access_control.logged_in? |
| 9 | + |
| 10 | + owner = query(:owner).find |
| 11 | + |
| 12 | + raise NotFound unless owner |
| 13 | + raise InsufficientAccess unless access_control.visible?(owner) |
| 14 | + |
| 15 | + results = query(:executions).for_owner(owner, access_control.user.id, 0, 0, |
| 16 | + params['from'], params['to']) |
| 17 | + result recuce_by_repo(results) |
| 18 | + end |
| 19 | + |
| 20 | + def recuce_by_repo(results) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength |
| 21 | + reduced = [] |
| 22 | + results.each do |item| |
| 23 | + minutes_consumed = calculate_minutes(item.started_at, item.finished_at) |
| 24 | + obj = reduced.find { |one| one[:repository_id] == item.repository_id && one[:os] == item.os } |
| 25 | + if obj |
| 26 | + obj[:credits_consumed] += item.credits_consumed |
| 27 | + obj[:minutes_consumed] += minutes_consumed |
| 28 | + else |
| 29 | + repo = Travis::API::V3::Models::Repository.find(item.repository_id) |
| 30 | + reduced << { |
| 31 | + repository_id: item.repository_id, |
| 32 | + os: item.os, |
| 33 | + credits_consumed: item.credits_consumed, |
| 34 | + minutes_consumed: minutes_consumed, |
| 35 | + repository: Renderer.render_model(repo, mode: :standard) |
| 36 | + } |
| 37 | + end |
| 38 | + end |
| 39 | + reduced |
| 40 | + end |
| 41 | + |
| 42 | + def calculate_minutes(start, finish) |
| 43 | + return 0 if start.to_s.empty? || finish.to_s.empty? |
| 44 | + |
| 45 | + ((Time.parse(finish.to_s) - Time.parse(start.to_s)) / 60.to_f).ceil |
| 46 | + end |
| 47 | + end |
| 48 | +end |
0 commit comments