summaryrefslogtreecommitdiff
path: root/src/fabric/src/fabric2_active_tasks.erl
blob: e706ebaa45bb649aa3231651b668a2f55dafebc0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
% Licensed under the Apache License, Version 2.0 (the "License"); you may not
% use this file except in compliance with the License. You may obtain a copy of
% the License at
%
%   http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
% License for the specific language governing permissions and limitations under
% the License.


-module(fabric2_active_tasks).


-export([
    get_active_tasks/0,
    get_active_task_info/1,

    update_active_task_info/2
]).


-define(ACTIVE_TASK_INFO, <<"active_task_info">>).


get_active_tasks() ->
    couch_jobs_fdb:tx(couch_jobs_fdb:get_jtx(undefined), fun(JTx) ->
        Types = couch_jobs:get_types(JTx),
        lists:foldl(fun(Type, TaskAcc) ->
            JobIds = couch_jobs:get_active_jobs_ids(JTx, Type),
            Tasks = lists:filtermap(fun(JobId) ->
                {ok, Data} = couch_jobs:get_job_data(JTx, Type, JobId),
                case maps:get(?ACTIVE_TASK_INFO, Data, not_found) of
                    not_found -> false;
                    #{} = Map when map_size(Map) == 0 -> false;
                    #{} = Info -> {true, Info}
                end
            end, JobIds),
            TaskAcc ++ Tasks
        end, [], Types)
    end).


get_active_task_info(JobData) ->
    #{?ACTIVE_TASK_INFO:= ActiveTaskInfo} = JobData,
    ActiveTaskInfo.


update_active_task_info(JobData, ActiveTaskInfo) ->
    JobData#{?ACTIVE_TASK_INFO => ActiveTaskInfo}.