mirror of
https://github.com/ansible/awx.git
synced 2026-01-14 11:20:39 -03:30
add job event replay awx-manage command
* awx-manage replay_job_event --job_id <id>
This commit is contained in:
parent
d02221702f
commit
e19a57c50a
@ -3138,6 +3138,26 @@ class JobEventSerializer(BaseSerializer):
|
||||
return ret
|
||||
|
||||
|
||||
class JobEventWebSocketSerializer(JobEventSerializer):
|
||||
created = serializers.SerializerMethodField()
|
||||
modified = serializers.SerializerMethodField()
|
||||
event_name = serializers.CharField(source='event')
|
||||
group_name = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = JobEvent
|
||||
fields = ('*', 'event_name', 'group_name',)
|
||||
|
||||
def get_created(self, obj):
|
||||
return obj.created.isoformat()
|
||||
|
||||
def get_modified(self, obj):
|
||||
return obj.modified.isoformat()
|
||||
|
||||
def get_group_name(self, obj):
|
||||
return 'job_events'
|
||||
|
||||
|
||||
class AdHocCommandEventSerializer(BaseSerializer):
|
||||
|
||||
event_display = serializers.CharField(source='get_event_display', read_only=True)
|
||||
@ -3177,6 +3197,26 @@ class AdHocCommandEventSerializer(BaseSerializer):
|
||||
return ret
|
||||
|
||||
|
||||
class AdHocCommandEventWebSocketSerializer(AdHocCommandEventSerializer):
|
||||
created = serializers.SerializerMethodField()
|
||||
modified = serializers.SerializerMethodField()
|
||||
event_name = serializers.CharField(source='event')
|
||||
group_name = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = AdHocCommandEvent
|
||||
fields = ('*', 'event_name', 'group_name',)
|
||||
|
||||
def get_created(self, obj):
|
||||
return obj.created.isoformat()
|
||||
|
||||
def get_modified(self, obj):
|
||||
return obj.modified.isoformat()
|
||||
|
||||
def get_group_name(self, obj):
|
||||
return 'ad_hoc_command_events'
|
||||
|
||||
|
||||
class JobLaunchSerializer(BaseSerializer):
|
||||
|
||||
passwords_needed_to_start = serializers.ReadOnlyField()
|
||||
|
||||
54
awx/main/management/commands/replay_job_events.py
Normal file
54
awx/main/management/commands/replay_job_events.py
Normal file
@ -0,0 +1,54 @@
|
||||
# Copyright (c) 2015 Ansible, Inc.
|
||||
# All Rights Reserved
|
||||
|
||||
import sys
|
||||
from optparse import make_option
|
||||
|
||||
from django.core.management.base import NoArgsCommand
|
||||
|
||||
from awx.main.models import (
|
||||
UnifiedJob,
|
||||
Job,
|
||||
AdHocCommand,
|
||||
)
|
||||
from awx.main.consumers import emit_channel_notification
|
||||
from awx.api.serializers import (
|
||||
JobEventWebSocketSerializer,
|
||||
AdHocCommandEventWebSocketSerializer,
|
||||
)
|
||||
|
||||
|
||||
class Command(NoArgsCommand):
|
||||
|
||||
help = 'Replay job events over websockets'
|
||||
|
||||
option_list = NoArgsCommand.option_list + (
|
||||
make_option('--job_id', dest='job_id', type='int', metavar='j',
|
||||
help='Id of the job to replay (job or adhoc)'),
|
||||
)
|
||||
|
||||
def replay_job_events(self, job_id):
|
||||
try:
|
||||
unified_job = UnifiedJob.objects.get(id=job_id)
|
||||
except UnifiedJob.DoesNotExist:
|
||||
print("UnifiedJob {} not found.".format(job_id))
|
||||
sys.exit(1)
|
||||
|
||||
job = unified_job.get_real_instance()
|
||||
job_events = job.job_events.order_by('created')
|
||||
serializer = None
|
||||
if type(job) is Job:
|
||||
serializer = JobEventWebSocketSerializer
|
||||
elif type(job) is AdHocCommand:
|
||||
serializer = AdHocCommandEventWebSocketSerializer
|
||||
else:
|
||||
print("Job is of type {} and replay is not yet supported.".format(type(job)))
|
||||
sys.exit(1)
|
||||
|
||||
for je in job_events:
|
||||
je_serialized = serializer(je).data
|
||||
emit_channel_notification('{}-{}'.format(je_serialized['group_name'], job.id), je_serialized)
|
||||
|
||||
def handle_noargs(self, **options):
|
||||
self.job_id = options.get('job_id')
|
||||
self.replay_job_events(self.job_id)
|
||||
@ -45,12 +45,7 @@ def emit_job_event_detail(sender, **kwargs):
|
||||
instance = kwargs['instance']
|
||||
created = kwargs['created']
|
||||
if created:
|
||||
event_serialized = JobEventSerializer(instance).data
|
||||
event_serialized['id'] = instance.id
|
||||
event_serialized["created"] = event_serialized["created"].isoformat()
|
||||
event_serialized["modified"] = event_serialized["modified"].isoformat()
|
||||
event_serialized["event_name"] = instance.event
|
||||
event_serialized["group_name"] = "job_events"
|
||||
event_serialized = JobEventWebSocketSerializer(instance).data
|
||||
emit_channel_notification('job_events-' + str(instance.job.id), event_serialized)
|
||||
|
||||
|
||||
@ -58,12 +53,7 @@ def emit_ad_hoc_command_event_detail(sender, **kwargs):
|
||||
instance = kwargs['instance']
|
||||
created = kwargs['created']
|
||||
if created:
|
||||
event_serialized = AdHocCommandEventSerializer(instance).data
|
||||
event_serialized['id'] = instance.id
|
||||
event_serialized["created"] = event_serialized["created"].isoformat()
|
||||
event_serialized["modified"] = event_serialized["modified"].isoformat()
|
||||
event_serialized["event_name"] = instance.event
|
||||
event_serialized["group_name"] = "ad_hoc_command_events"
|
||||
event_serialized = AdHocCommandEventWebSocketSerializer(instance).data
|
||||
emit_channel_notification('ad_hoc_command_events-' + str(instance.ad_hoc_command_id), event_serialized)
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user