diff --git a/components/ide/jetbrains/backend-plugin/build.gradle.kts b/components/ide/jetbrains/backend-plugin/build.gradle.kts index 8172aff262b069..c55c53d7b91cdd 100644 --- a/components/ide/jetbrains/backend-plugin/build.gradle.kts +++ b/components/ide/jetbrains/backend-plugin/build.gradle.kts @@ -29,8 +29,16 @@ repositories { } dependencies { - implementation(project(":supervisor-api")) - implementation(project(":gitpod-protocol")) + implementation(project(":supervisor-api")) { + artifact { + type = "jar" + } + } + implementation(project(":gitpod-protocol")) { + artifact { + type = "jar" + } + } implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.5.2") implementation("io.ktor:ktor-client-core:1.6.3") @@ -82,6 +90,10 @@ tasks { jvmTarget = "11" } + buildSearchableOptions { + enabled = false + } + test { useJUnitPlatform() } diff --git a/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/jetbrains/backend/listeners/MyApplicationActivationListener.kt b/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/jetbrains/backend/listeners/MyApplicationActivationListener.kt new file mode 100644 index 00000000000000..e7ac71b82f854e --- /dev/null +++ b/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/jetbrains/backend/listeners/MyApplicationActivationListener.kt @@ -0,0 +1,18 @@ +// Copyright (c) 2021 Gitpod GmbH. All rights reserved. +// Licensed under the GNU Affero General Public License (AGPL). +// See License-AGPL.txt in the project root for license information. + +package io.gitpod.ide.jetbrains.backend.listeners + +import com.intellij.ide.ApplicationInitializedListener +import com.intellij.openapi.application.ApplicationActivationListener +import com.intellij.openapi.components.ServiceManager +import io.gitpod.ide.jetbrains.backend.services.HeartbeatService +import com.intellij.openapi.wm.IdeFrame +import com.intellij.openapi.components.service + +internal class MyApplicationActivationListener : ApplicationActivationListener { + override fun applicationActivated(ideFrame: IdeFrame) { + service() // Services are not loaded if not referenced + } +} diff --git a/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/intellij/backend/services/AuthTokenService.kt b/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/jetbrains/backend/services/AuthTokenService.kt similarity index 100% rename from components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/intellij/backend/services/AuthTokenService.kt rename to components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/jetbrains/backend/services/AuthTokenService.kt diff --git a/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/intellij/backend/services/ControllerStatusProvider.kt b/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/jetbrains/backend/services/ControllerStatusProvider.kt similarity index 94% rename from components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/intellij/backend/services/ControllerStatusProvider.kt rename to components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/jetbrains/backend/services/ControllerStatusProvider.kt index d87216c12c8cc6..dbc7ee043b4176 100644 --- a/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/intellij/backend/services/ControllerStatusProvider.kt +++ b/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/jetbrains/backend/services/ControllerStatusProvider.kt @@ -10,6 +10,7 @@ import io.ktor.client.HttpClient import io.ktor.client.features.HttpTimeout import io.ktor.client.features.json.JsonFeature import io.ktor.client.request.get +import io.ktor.client.features.json.JacksonSerializer class ControllerStatusProvider { private val logger = logger() @@ -19,7 +20,9 @@ class ControllerStatusProvider { @Suppress("MagicNumber") requestTimeoutMillis = 2000 } - install(JsonFeature) + install(JsonFeature) { + serializer = JacksonSerializer() + } } private val cwmToken = System.getenv("CWM_HOST_STATUS_OVER_HTTP_TOKEN") diff --git a/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/intellij/backend/services/HeartbeatService.kt b/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/jetbrains/backend/services/HeartbeatService.kt similarity index 87% rename from components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/intellij/backend/services/HeartbeatService.kt rename to components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/jetbrains/backend/services/HeartbeatService.kt index 0bb66546ddc569..c28e60d7f1c444 100644 --- a/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/intellij/backend/services/HeartbeatService.kt +++ b/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/jetbrains/backend/services/HeartbeatService.kt @@ -19,13 +19,13 @@ import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicReference import kotlin.concurrent.thread import kotlin.random.Random.Default.nextInt +import java.lang.Thread @Service -class HeartbeatService( - private val fetchToken: suspend () -> String = { AuthTokenService.fetchToken() }, - private val controllerStatusProvider: ControllerStatusProvider = ControllerStatusProvider(), -) : Disposable { +class HeartbeatService() : Disposable { private val logger = logger() + private val fetchToken: suspend () -> String = { AuthTokenService.fetchToken() } + private val controllerStatusProvider = ControllerStatusProvider() @Suppress("MagicNumber") private val intervalInSeconds = 30 @@ -44,8 +44,10 @@ class HeartbeatService( private val closed = AtomicBoolean(false) init { + logger.info("Service initiated") + @Suppress("MagicNumber") - thread(name = "gitpod-heartbeat") { + thread(name = "gitpod-heartbeat", contextClassLoader = this.javaClass.classLoader) { runBlocking { while (!closed.get()) { checkActivity(intervalInSeconds + nextInt(5, 15)) @@ -56,7 +58,7 @@ class HeartbeatService( } private suspend fun checkActivity(maxIntervalInSeconds: Int) { - logger.debug("Checking activity") + logger.info("Checking activity") val status = controllerStatusProvider.fetch() val previousStatus = this.status.getAndSet(status) @@ -85,7 +87,7 @@ class HeartbeatService( try { val s = server.get()!! s.sendHeartBeat(SendHeartBeatOptions(instanceId, wasClosed)).await() - logger.debug("Heartbeat sent with wasClosed=$wasClosed") + logger.info("Heartbeat sent with wasClosed=$wasClosed") } catch (e: Exception) { // If connection fails for some reason, // remove the reference to the existing server. @@ -98,10 +100,10 @@ class HeartbeatService( /** * @throws DeploymentException * @throws IOException - * @throw IllegalStateException + * @throws IllegalStateException */ private suspend fun createServer(): GitpodServer { - logger.debug("Creating GitpodServer") + logger.info("Creating GitpodServer") val token = fetchToken() val server = ConnectionHelper().connect(uri, origin, token).server() return server diff --git a/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/intellij/backend/utils/Retrier.kt b/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/jetbrains/backend/utils/Retrier.kt similarity index 100% rename from components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/intellij/backend/utils/Retrier.kt rename to components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/jetbrains/backend/utils/Retrier.kt diff --git a/components/ide/jetbrains/backend-plugin/src/main/resources/META-INF/plugin.xml b/components/ide/jetbrains/backend-plugin/src/main/resources/META-INF/plugin.xml index c7191a32406e9f..21426023c1907a 100644 --- a/components/ide/jetbrains/backend-plugin/src/main/resources/META-INF/plugin.xml +++ b/components/ide/jetbrains/backend-plugin/src/main/resources/META-INF/plugin.xml @@ -7,4 +7,9 @@ com.intellij.modules.platform + + + +