override fun start()

in plugin-azure-agent/src/main/kotlin/jetbrains/buildServer/clouds/azure/SpotInstanceTerminationCheckerImpl.kt [17:48]


    override fun start(resourceName: String) {
        LOG.info("Subscribe on Azure scheduledEvents metadata")
        val task = Runnable {
            val eventsMetadata = try {
                AzureMetadata.readScheduledEventsMetadata()
            } catch (e: Throwable) {
                LOG.info("Azure scheduledEvents metadata is not available: ${e.message}")
                LOG.debug(e)
                null
            }
            eventsMetadata?.events?.firstOrNull {
                PREEMPT_EVENT_TYPE == it.eventType &&
                        (it.resources ?: emptyList()).contains(resourceName) &&
                        RESOURCE_TYPE == it.resourceType
            }?.let {
                LOG.info("The spot instance is scheduled for eviction at ${it.notBefore}")

                val currentBuild = myBuildTracker.currentBuild as AgentRunningBuildEx?
                currentBuild?.buildLogger?.logMessage(DefaultMessagesInfo.createTextMessage(String.format("The spot instance is scheduled for eviction at ${it.notBefore}.")))

                try {
                    AzureMetadata.approveEvent(eventsMetadata.documentIncarnation, it.eventId)
                } catch (e: Throwable) {
                    LOG.info("Could not approve Azure scheduled event: ${it.eventId}, message: ${e.message}")
                    LOG.debug(e)
                }

                myCancellable.cancel()
            }
        }
        myCancellable = myScheduler.scheduleWithFixedDelay(task, 0, 1, TimeUnit.SECONDS)
    }