Skip to content

Commit 2d41dd6

Browse files
committed
Merge
2 parents 5214469 + 910ce2e commit 2d41dd6

File tree

23 files changed

+847
-490
lines changed

23 files changed

+847
-490
lines changed

CHANGELOG.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,20 @@
11
# Changelog
22

3-
## [2.0.321] - 2024-04-22
3+
## [2.0.324] - 2024-04-26
4+
5+
- improve AuthManager by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2115
6+
7+
## 2.0.323 - 2024-04-25
8+
9+
- Update UI by @kshmidt-digma in https://github.com/digma-ai/digma-intellij-plugin/pull/2113
10+
11+
## 2.0.322 - 2024-04-24
12+
13+
- Feature/asset naviagation by @opoliarush in https://github.com/digma-ai/digma-intellij-plugin/pull/2105
14+
- Fixed error message for login by @opoliarush in https://github.com/digma-ai/digma-intellij-plugin/pull/2109
15+
- Update UI by @kshmidt-digma in https://github.com/digma-ai/digma-intellij-plugin/pull/2112
16+
17+
## 2.0.321 - 2024-04-22
418

519
- unify action names by @opoliarush in https://github.com/digma-ai/digma-intellij-plugin/pull/2094
620
- catch exceptions in settings changed Closes #2100 by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2102

ide-common/src/main/java/org/digma/intellij/plugin/analytics/AnalyticsService.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,6 @@ public InsightsStatsResult getInsightsStats(String spanCodeObjectId) throws Anal
495495
var env = getCurrentEnvironmentId();
496496
var envId = getCurrentEnvironmentId();
497497
var params = new HashMap<String, Object>();
498-
params.put("Environment", env);
499498
params.put("Environment", envId);
500499

501500
if (spanCodeObjectId != null) {

ide-common/src/main/java/org/digma/intellij/plugin/log/Log.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22

33
import com.intellij.openapi.diagnostic.Logger;
44
import com.intellij.openapi.project.Project;
5-
import org.digma.intellij.plugin.errorreporting.ErrorReporter;
5+
import org.digma.intellij.plugin.errorreporting.*;
66

7+
import java.time.Duration;
78
import java.util.function.Consumer;
89

910
/**
@@ -15,6 +16,11 @@ public class Log {
1516
public static final String DIGMA = "Digma: ";
1617
public static final String DIGMA_PROJECT = "Digma: Project:";
1718

19+
20+
private static final FrequentErrorDetector FREQUENT_ERROR_DETECTOR = new FrequentErrorDetector(Duration.ofMinutes(10));
21+
22+
23+
1824
public static void log(Consumer<String> consumer, Project project, String format, Object... args) {
1925
consumer.accept(DIGMA_PROJECT + project.getName() + ": " + String.format(format.replace("{}", "%s"), args));
2026
}
@@ -24,18 +30,31 @@ public static void log(Consumer<String> consumer, String format, Object... args)
2430
}
2531

2632
public static void debugWithException(Logger logger,Throwable e, String format, Object... args) {
33+
if (FREQUENT_ERROR_DETECTOR.isTooFrequentException(format, e)) {
34+
return;
35+
}
36+
2737
logger.debug(DIGMA + String.format(format.replace("{}", "%s"), args),e);
2838
}
2939

3040
public static void debugWithException(Logger logger, Project project,Throwable e, String format, Object... args) {
41+
if (FREQUENT_ERROR_DETECTOR.isTooFrequentException(format, e)) {
42+
return;
43+
}
3144
logger.debug(DIGMA_PROJECT + project.getName() + ": " + String.format(format.replace("{}", "%s"), args),e);
3245
}
3346

3447
public static void warnWithException(Logger logger,Throwable e, String format, Object... args) {
48+
if (FREQUENT_ERROR_DETECTOR.isTooFrequentException(format, e)) {
49+
return;
50+
}
3551
logger.warn(DIGMA + String.format(format.replace("{}", "%s"), args),e);
3652
}
3753

3854
public static void warnWithException(Logger logger, Project project,Throwable e, String format, Object... args) {
55+
if (FREQUENT_ERROR_DETECTOR.isTooFrequentException(format, e)) {
56+
return;
57+
}
3958
logger.warn(DIGMA_PROJECT + project.getName() + ": " + String.format(format.replace("{}", "%s"), args),e);
4059
}
4160

@@ -49,15 +68,25 @@ public static void log(Consumer<String> consumer, String msg) {
4968
}
5069

5170
public static void error(Logger logger,Project project, Exception exception, String format, Object... args) {
71+
if (FREQUENT_ERROR_DETECTOR.isTooFrequentException(format, exception)) {
72+
return;
73+
}
74+
5275
var msg = String.format(format.replace("{}", "%s"), args);
5376
error(logger, exception, DIGMA_PROJECT + project.getName() + ": " + msg);
5477
ErrorReporter.getInstance().reportError(project, "Log.error", exception);
5578
}
5679
public static void error(Logger logger, Exception exception, String format, Object... args) {
80+
if (FREQUENT_ERROR_DETECTOR.isTooFrequentException(format, exception)) {
81+
return;
82+
}
5783
error(logger, exception, DIGMA + String.format(format.replace("{}", "%s"), args));
5884
}
5985

6086
public static void error(Logger logger, Exception exception, String msg) {
87+
if (FREQUENT_ERROR_DETECTOR.isTooFrequentException(msg, exception)) {
88+
return;
89+
}
6190
logger.error(DIGMA + msg, exception);
6291
}
6392

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package org.digma.intellij.plugin.auth
2+
3+
import com.intellij.openapi.diagnostic.Logger
4+
import org.digma.intellij.plugin.analytics.AuthenticationException
5+
import org.digma.intellij.plugin.analytics.RestAnalyticsProvider
6+
import org.digma.intellij.plugin.auth.account.DigmaAccount
7+
import org.digma.intellij.plugin.auth.account.DigmaDefaultAccountHolder
8+
import org.digma.intellij.plugin.common.ExceptionUtils
9+
import org.digma.intellij.plugin.errorreporting.ErrorReporter
10+
import org.digma.intellij.plugin.log.Log
11+
12+
abstract class AbstractLoginHandler(protected val analyticsProvider: RestAnalyticsProvider) : LoginHandler {
13+
14+
override val logger: Logger = Logger.getInstance(this::class.java)
15+
16+
protected val authApiClient = AuthApiClient(analyticsProvider)
17+
18+
protected fun defaultAccountExists(): Boolean {
19+
return DigmaDefaultAccountHolder.getInstance().account != null
20+
}
21+
22+
protected fun getDefaultAccount(): DigmaAccount? {
23+
return DigmaDefaultAccountHolder.getInstance().account
24+
}
25+
26+
27+
override fun login(user: String, password: String): LoginResult {
28+
29+
return try {
30+
31+
reportPosthogEvent("login", mapOf("user" to user))
32+
33+
Log.log(logger::trace, "login called for url {}, user {}", analyticsProvider.apiUrl, user)
34+
35+
if (defaultAccountExists()) {
36+
Log.log(logger::trace, "default account exists, deleting before login, {}", getDefaultAccount())
37+
logout()
38+
}
39+
40+
Log.log(logger::trace, "doing login for url {}, user {}", analyticsProvider.apiUrl, user)
41+
42+
val loginResult = authApiClient.login(user, password)
43+
44+
Log.log(logger::trace, "login success for url {}, user {}, created account {}", analyticsProvider.apiUrl, user, getDefaultAccount())
45+
46+
reportPosthogEvent("login success", mapOf("user" to user))
47+
48+
loginResult
49+
50+
} catch (e: Throwable) {
51+
52+
Log.warnWithException(logger, e, "Exception in login {}, url {}", e, analyticsProvider.apiUrl)
53+
ErrorReporter.getInstance().reportError("AuthManager.login", e)
54+
55+
if (e is AuthenticationException) {
56+
Log.warnWithException(logger, e, "Exception in login, url {}", analyticsProvider.apiUrl)
57+
ErrorReporter.getInstance().reportError("AuthManager.login", e)
58+
val errorMessage = ExceptionUtils.getNonEmptyMessage(e)
59+
reportPosthogEvent("login failed", mapOf("user" to user, "error" to errorMessage.toString()))
60+
//return no success LoginResult
61+
LoginResult(false, null, e.detailedMessage)
62+
}
63+
64+
65+
LoginResult(false, null, ExceptionUtils.getNonEmptyMessage(e))
66+
67+
}
68+
}
69+
70+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package org.digma.intellij.plugin.auth
2+
3+
import kotlinx.datetime.Clock
4+
import org.digma.intellij.plugin.analytics.RestAnalyticsProvider
5+
import org.digma.intellij.plugin.auth.account.DigmaAccount
6+
import org.digma.intellij.plugin.auth.account.DigmaAccountManager
7+
import org.digma.intellij.plugin.auth.credentials.DigmaCredentials
8+
import org.digma.intellij.plugin.model.rest.login.LoginRequest
9+
import org.digma.intellij.plugin.model.rest.login.RefreshRequest
10+
11+
12+
class AuthApiClient(private val analyticsProvider: RestAnalyticsProvider) {
13+
14+
@Synchronized
15+
fun login(user: String, password: String): LoginResult {
16+
17+
val loginResponse = analyticsProvider.login(LoginRequest(user, password))
18+
19+
val digmaAccount = DigmaAccountManager.createAccount(analyticsProvider.apiUrl, loginResponse.userId)
20+
21+
val digmaCredentials = DigmaCredentials(
22+
loginResponse.accessToken,
23+
loginResponse.refreshToken,
24+
analyticsProvider.apiUrl,
25+
TokenType.Bearer.name,
26+
loginResponse.expiration.time,
27+
Clock.System.now().toEpochMilliseconds()
28+
)
29+
30+
updateAccount(digmaAccount, digmaCredentials)
31+
32+
return LoginResult(true, loginResponse.userId, null)
33+
}
34+
35+
36+
@Synchronized
37+
fun refreshToken(
38+
digmaAccount: DigmaAccount,
39+
credentials: DigmaCredentials
40+
): Boolean {
41+
42+
val loginResponse = analyticsProvider.refreshToken(RefreshRequest(credentials.accessToken, credentials.refreshToken))
43+
44+
val digmaCredentials = DigmaCredentials(
45+
loginResponse.accessToken,
46+
loginResponse.refreshToken,
47+
digmaAccount.server.url,
48+
TokenType.Bearer.name,
49+
loginResponse.expiration.time,
50+
Clock.System.now().toEpochMilliseconds()
51+
)
52+
53+
updateAccount(digmaAccount, digmaCredentials)
54+
55+
return true
56+
57+
}
58+
59+
}

0 commit comments

Comments
 (0)