clearml-server/server/database/model/task/task.py

172 lines
5.1 KiB
Python
Raw Normal View History

2019-06-10 21:24:35 +00:00
from mongoengine import (
StringField,
EmbeddedDocumentField,
EmbeddedDocument,
DateTimeField,
IntField,
ListField,
LongField,
2019-06-10 21:24:35 +00:00
)
from database import Database, strict
from database.fields import (
StrippedStringField,
SafeMapField,
SafeDictField,
UnionField,
EmbeddedDocumentSortedListField,
SafeSortedListField,
)
2019-06-10 21:24:35 +00:00
from database.model import AttributedDocument
from database.model.base import ProperDictMixin
2019-06-10 21:24:35 +00:00
from database.model.model_labels import ModelLabels
from database.model.project import Project
from database.utils import get_options
from .metrics import MetricEvent, MetricEventStats
2019-06-10 21:24:35 +00:00
from .output import Output
DEFAULT_LAST_ITERATION = 0
class TaskStatus(object):
created = "created"
queued = "queued"
in_progress = "in_progress"
stopped = "stopped"
publishing = "publishing"
published = "published"
closed = "closed"
failed = "failed"
completed = "completed"
unknown = "unknown"
2019-06-10 21:24:35 +00:00
class TaskStatusMessage(object):
stopping = "stopping"
2019-06-10 21:24:35 +00:00
class TaskSystemTags(object):
development = "development"
2019-06-10 21:24:35 +00:00
class Script(EmbeddedDocument):
binary = StringField(default="python")
2019-06-10 21:24:35 +00:00
repository = StringField(required=True)
tag = StringField()
branch = StringField()
version_num = StringField()
entry_point = StringField(required=True)
working_dir = StringField()
requirements = SafeDictField()
2019-07-08 21:04:26 +00:00
diff = StringField()
2019-06-10 21:24:35 +00:00
class ArtifactTypeData(EmbeddedDocument):
preview = StringField()
content_type = StringField()
data_hash = StringField()
2019-12-24 16:01:48 +00:00
class ArtifactModes:
input = "input"
output = "output"
class Artifact(EmbeddedDocument):
key = StringField(required=True)
type = StringField(required=True)
2019-12-24 16:01:48 +00:00
mode = StringField(choices=get_options(ArtifactModes), default=ArtifactModes.output)
uri = StringField()
hash = StringField()
content_size = LongField()
timestamp = LongField()
type_data = EmbeddedDocumentField(ArtifactTypeData)
display_data = SafeSortedListField(ListField(UnionField((int, float, str))))
class Execution(EmbeddedDocument, ProperDictMixin):
2019-06-10 21:24:35 +00:00
test_split = IntField(default=0)
parameters = SafeDictField(default=dict)
model = StringField(reference_field="Model")
model_desc = SafeMapField(StringField(default=""))
2019-06-10 21:24:35 +00:00
model_labels = ModelLabels()
framework = StringField()
artifacts = EmbeddedDocumentSortedListField(Artifact)
docker_cmd = StringField()
2019-06-10 21:24:35 +00:00
queue = StringField()
""" Queue ID where task was queued """
2019-06-10 21:24:35 +00:00
class TaskType(object):
training = "training"
testing = "testing"
2019-06-10 21:24:35 +00:00
class Task(AttributedDocument):
meta = {
"db_alias": Database.backend,
"strict": strict,
"indexes": [
"created",
"started",
"completed",
2020-04-01 16:20:53 +00:00
"parent",
"project",
("company", "name"),
("company", "type", "system_tags", "status"),
("company", "project", "type", "system_tags", "status"),
("status", "last_update"), # for maintenance tasks
2019-06-10 21:24:35 +00:00
{
"name": "%s.task.main_text_index" % Database.backend,
"fields": [
"$name",
"$id",
"$comment",
"$execution.model",
"$output.model",
"$script.repository",
"$script.entry_point",
2019-06-10 21:24:35 +00:00
],
"default_language": "english",
"weights": {
"name": 10,
"id": 10,
"comment": 10,
"execution.model": 2,
"output.model": 2,
"script.repository": 1,
"script.entry_point": 1,
2019-06-10 21:24:35 +00:00
},
},
],
}
id = StringField(primary_key=True)
name = StrippedStringField(
required=True, user_set_allowed=True, sparse=False, min_length=3
)
type = StringField(required=True, choices=get_options(TaskType))
status = StringField(default=TaskStatus.created, choices=get_options(TaskStatus))
status_reason = StringField()
status_message = StringField()
status_changed = DateTimeField()
comment = StringField(user_set_allowed=True)
created = DateTimeField(required=True, user_set_allowed=True)
started = DateTimeField()
completed = DateTimeField()
published = DateTimeField()
parent = StringField()
project = StringField(reference_field=Project, user_set_allowed=True)
output = EmbeddedDocumentField(Output, default=Output)
execution: Execution = EmbeddedDocumentField(Execution, default=Execution)
tags = ListField(StringField(required=True), user_set_allowed=True)
system_tags = ListField(StringField(required=True), user_set_allowed=True)
2019-06-10 21:24:35 +00:00
script = EmbeddedDocumentField(Script)
last_worker = StringField()
last_worker_report = DateTimeField()
2019-06-10 21:24:35 +00:00
last_update = DateTimeField()
last_iteration = IntField(default=DEFAULT_LAST_ITERATION)
last_metrics = SafeMapField(field=SafeMapField(EmbeddedDocumentField(MetricEvent)))
metric_stats = SafeMapField(field=EmbeddedDocumentField(MetricEventStats))