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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
# Copyright (c) 2020 Dell, Inc. or its subsidiaries
#
# 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.
# This is referred from Redfish standard schema.
# https://redfish.dmtf.org/schemas/Task.v1_4_3.json
from http import client as http_client
import logging
from sushy.resources import base
from sushy.resources import constants as res_cons
from sushy.resources.registry import message_registry
from sushy.resources.taskservice import constants as ts_cons
from sushy import utils
LOG = logging.getLogger(__name__)
class Task(base.ResourceBase):
identity = base.Field('Id', required=True)
"""The Task identity"""
name = base.Field('Name', required=True)
"""The Task name"""
description = base.Field('Description')
"""The Task description"""
task_monitor = base.Field('TaskMonitor')
"""An opaque URL that the client can use to monitor an asynchronous
operation"""
start_time = base.Field('StartTime')
"""Start time of the Task"""
end_time = base.Field('EndTime')
"""End time of the Task"""
percent_complete = base.Field('PercentComplete', adapter=utils.int_or_none)
"""Percentage complete of the Task"""
task_state = base.MappedField('TaskState', ts_cons.TaskState)
"""The Task state"""
task_status = base.MappedField('TaskStatus', res_cons.Health)
"""The Task status"""
messages = base.MessageListField("Messages")
"""List of :class:`.MessageListField` with messages from the Task"""
def __init__(self, connector, identity, redfish_version=None,
registries=None, json_doc=None, root=None):
"""A class representing a Task
:param connector: A Connector instance
:param identity: The identity of the task
:param redfish_version: The version of RedFish. Used to construct
the object according to schema of the given version.
:param registries: Dict of Redfish Message Registry objects to be
used in any resource that needs registries to parse messages
:param field_data: the data to use populating the fields
:param root: Sushy root object. Empty for Sushy root itself.
"""
super().__init__(
connector, identity, redfish_version, registries,
json_doc=json_doc, root=root)
@property
def is_processing(self):
"""Indicates if the Task is processing"""
return self.status_code == http_client.ACCEPTED
def parse_messages(self):
"""Parses the messages"""
for m in self.messages:
message_registry.parse_message(self._registries, m)
class TaskCollection(base.ResourceCollectionBase):
@property
def _resource_type(self):
return Task
@property
@utils.cache_it
def summary(self):
"""Summary of task ids and corresponding state
:returns: dictionary in the format
{'jid_123456789': sushy.TaskState.NEW,
'jid_123454321': sushy.TaskState.RUNNING}
"""
task_dict = {}
for task in self.get_members():
task_dict[task.identity] = task.task_state
return task_dict
|