| #!/usr/bin/env python |
| # |
| # Copyright (C) 2018 The Android Open Source Project |
| # |
| # 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. |
| # |
| |
| from webapp.src import vtslab_status as Status |
| from webapp.src.utils import email_util |
| |
| |
| def UpdateParentSchedule(job, status): |
| """Updates a parent schedule of the given job with status. |
| |
| Args: |
| job: a JobModel entity. |
| status: an integer, job status value. |
| """ |
| if status not in [ |
| Status.JOB_STATUS_DICT["complete"], |
| Status.JOB_STATUS_DICT["infra-err"], |
| Status.JOB_STATUS_DICT["expired"], |
| Status.JOB_STATUS_DICT["bootup-err"] |
| ]: |
| return |
| |
| if job.parent_schedule: |
| schedule = job.parent_schedule.get() |
| if schedule: |
| previous_suspended = schedule.suspended |
| if schedule.error_count is None: |
| schedule.error_count = 0 |
| if status == Status.JOB_STATUS_DICT["complete"]: |
| schedule.error_count = 0 |
| schedule.suspended = False |
| elif status in [ |
| Status.JOB_STATUS_DICT["infra-err"], |
| Status.JOB_STATUS_DICT["expired"], |
| Status.JOB_STATUS_DICT["bootup-err"] |
| ]: |
| schedule.error_count += 1 |
| if schedule.error_count >= Status.NUM_ERRORS_FOR_SUSPENSION: |
| schedule.suspended = True |
| schedule.put() |
| if previous_suspended != schedule.suspended: |
| email_util.send_schedule_suspension_notification(schedule) |