@@ -31,18 +31,20 @@ class Task:
3131
3232 :param name: The name of the task.
3333 :type name: str
34- :param task_type: The type of the task .
35- :type task_type: TaskType
34+ :param task_id: Task unique ID (e.g., ID0000001) .
35+ :type task_id: str
3636 :param runtime: Task runtime in seconds.
3737 :type runtime: float
38+ :param input_files: List of input files used by the task.
39+ :type input_files: Optional[List[File]]
40+ :param output_files: List of output files used by the task.
41+ :type output_files: Optional[List[File]]
3842 :param cores: Number of cores required by the task.
3943 :type cores: float
40- :param task_id: Task unique ID (e.g., ID0000001).
41- :type task_id: Optional[str]
4244 :param category: Task category (can be used, for example, to define tasks that use the same program).
4345 :type category: Optional[str]
44- :param machine: Machine on which is the task has been executed.
45- :type machine : Optional[Machine]
46+ :param machines: Machines on which is the task has been executed.
47+ :type machines : Optional[List[ Machine] ]
4648 :param program: Program name.
4749 :type program: Optional[str]
4850 :param args: List of task arguments.
@@ -61,20 +63,21 @@ class Task:
6163 :type avg_power: Optional[float]
6264 :param priority: Task priority.
6365 :type priority: Optional[int]
64- :param files: List of input/output files used by the task.
65- :type files: Optional[List[File]]
66+ :param task_type: The type of the task.
67+ :type task_type: TaskType
6668 :param logger: The logger where to log information/warning or errors.
6769 :type logger: Optional[Logger]
6870 """
6971
7072 def __init__ (self ,
7173 name : str ,
72- # task_type: TaskType ,
74+ task_id : str ,
7375 runtime : float ,
76+ input_files : Optional [List [File ]] = None ,
77+ output_files : Optional [List [File ]] = None ,
7478 cores : float = 1.0 ,
75- task_id : Optional [str ] = None ,
7679 category : Optional [str ] = None ,
77- machine : Optional [Machine ] = None ,
80+ machines : Optional [List [ Machine ] ] = None ,
7881 program : Optional [str ] = None ,
7982 args : Optional [List [str ]] = None ,
8083 avg_cpu : Optional [float ] = None ,
@@ -84,19 +87,18 @@ def __init__(self,
8487 energy : Optional [int ] = None ,
8588 avg_power : Optional [float ] = None ,
8689 priority : Optional [int ] = None ,
87- files : Optional [List [ File ] ] = None ,
88- logger : Optional [Logger ] = None ,
90+ executedAt : Optional [str ] = None ,
91+ task_type : Optional [TaskType ] = None ,
8992 launch_dir : Optional [str ] = None ,
90- start_time : Optional [str ] = None ,
93+ logger : Optional [Logger ] = None ,
9194 ) -> None :
9295 """A task in a workflow."""
9396 self .logger : Logger = logging .getLogger (
9497 __name__ ) if logger is None else logger
9598 self .name : str = name
96- # self.type: TaskType = task_type
99+ self .task_id : str = task_id
97100 self .runtime : float = runtime
98101 self .cores : Optional [float ] = cores
99- self .task_id : Optional [str ] = task_id
100102 self .category : Optional [str ] = category
101103 self .program : Optional [str ] = program
102104 self .args : List [str ] = args if args else []
@@ -106,40 +108,45 @@ def __init__(self,
106108 self .memory : Optional [int ] = memory
107109 self .energy : Optional [int ] = energy
108110 self .avg_power : Optional [float ] = avg_power
109- self .files : List [File ] = files if files else []
110- self .machine : Machine = machine
111+ self .input_files : List [File ] = input_files if input_files else []
112+ self .output_files : List [File ] = output_files if output_files else []
113+ self .machines : Optional [List [Machine ]] = machines
111114 self .priority : Optional [int ] = priority
115+ self .type : Optional [TaskType ] = task_type
112116 self .launch_dir : Optional [str ] = launch_dir
113- self .start_time : Optional [str ] = str (datetime .now ().astimezone ().isoformat ()) if not start_time else start_time
117+ self .start_time : Optional [str ] = str (datetime .now ().astimezone ().isoformat ()) if not executedAt else executedAt
114118 self .logger .debug (
115- f"created { self . task_id } task { self .name } : runtime => { self .runtime } seconds." )
119+ f"created task { self .task_id } : runtime => { self .runtime } seconds." )
116120
117- def as_dict (self ) -> Dict :
118- """A JSON representation of the task.
121+ def specification_as_dict (self ) -> Dict :
122+ """A JSON representation of the task specification .
119123
120124 :return: A JSON object representation of the task.
121125 :rtype: Dict
122126 """
123- task_files = []
124- for f in self .files :
125- task_files .append (f .as_dict ())
126-
127127 task_obj = {
128128 'name' : self .name ,
129- # 'type': self.type.value,
130- 'command' : {},
129+ 'id' : self .task_id ,
131130 'parents' : [],
132131 'children' : [],
133- 'files' : task_files ,
132+ 'input_files' : [f .file_id for f in self .input_files ],
133+ 'output_files' : [f .file_id for f in self .output_files ]
134+ }
135+ return task_obj
136+
137+ def execution_as_dict (self ) -> Dict :
138+ """A JSON representation of the task execution.
139+
140+ :return: A JSON object representation of the task.
141+ :rtype: Dict
142+ """
143+ task_obj = {
144+ 'id' : self .task_id ,
145+ 'runtimeInSeconds' : self .runtime ,
146+ 'command' : {}
134147 }
135- if self .runtime is not None :
136- task_obj ['runtimeInSeconds' ] = self .runtime
137148 if self .cores is not None :
138- task_obj ['cores' ] = self .cores
139- if self .task_id is not None :
140- task_obj ['id' ] = self .task_id
141- if self .category is not None :
142- task_obj ['category' ] = self .category
149+ task_obj ['coreCount' ] = self .cores
143150 if self .avg_cpu is not None :
144151 task_obj ['avgCPU' ] = self .avg_cpu
145152 if self .bytes_read is not None :
@@ -149,19 +156,21 @@ def as_dict(self) -> Dict:
149156 if self .memory is not None :
150157 task_obj ['memoryInBytes' ] = self .memory
151158 if self .energy is not None :
152- task_obj ['energy ' ] = self .energy
159+ task_obj ['energyInKWh ' ] = self .energy
153160 if self .avg_power is not None :
154- task_obj ['avgPower ' ] = self .avg_power
161+ task_obj ['avgPowerInKWh ' ] = self .avg_power
155162 if self .priority is not None :
156163 task_obj ['priority' ] = self .priority
157164 if self .program is not None :
158165 task_obj ['command' ]['program' ] = self .program
159166 if self .args is not None :
160167 task_obj ['command' ]['arguments' ] = self .args
161- if self .machine is not None :
162- task_obj ['machine' ] = self .machine .name
168+ if self .machines is not None :
169+ task_obj ['machines' ] = [m .name for m in self .machines ]
170+ if self .start_time :
171+ task_obj ['executedAt' ] = self .start_time
172+ if self .category is not None :
173+ task_obj ['category' ] = self .category
163174 if self .launch_dir :
164175 task_obj ['launchDir' ] = self .launch_dir
165- if self .start_time :
166- task_obj ['startedAt' ] = self .start_time
167176 return task_obj
0 commit comments