Skip to content

Commit fe2f355

Browse files
authored
Merge pull request #23 from occidere/feature/issue-22
[BE] Add skip alert param, es credentials param
2 parents 9d4ee8f + 4626b01 commit fe2f355

7 files changed

Lines changed: 28 additions & 10 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ sbt clean assembly
6868
export gw_tasks=followerWatchTask,repositoryWatchTask,reactionWatchTask # tasks
6969
export gw_user_id=${YOUR_GITHUB_USER_ID}
7070
export gw_es_endpoint=${YOUR_ES_ENDPOINT} # default: localhost:9200
71+
export gw_es_username=${YOUR_ES_USERNAME) # Optional
72+
export gw_es_password=${YOUR_ES_PASSWORD} # Optional
7173
export gw_line_bot_id=${YOUR_LINE_BOT_ID}
7274
export gw_line_channel_token=${YOUR_LINE_CHANNEL_TOKEN}
7375
export gw_github_api_token=${YOUR_GITHUB_API_TOKEN}

src/main/scala/org/occidere/githubwatcher/GithubWatcher.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ import scala.util.{Failure, Success, Try}
1414
*/
1515
object GithubWatcher extends App with GithubWatcherTask with GithubWatcherLogger {
1616
private val userId = sys.env.getOrElse("gw_user_id", "")
17-
sys.env.getOrElse("gw_tasks", "").split(",").map(_.trim)
17+
private val skipAlert = sys.env.getOrElse("gw_skip_alert", "false").toBoolean
18+
sys.env.getOrElse("gw_tasks", "").split(",").map(_.trim).filterNot(taskName => taskName.isBlank)
1819
.foreach(task => {
1920
if (!AVAILABLE_TASKS.contains(task)) logger.warn(s"Unsupported task: $task")
20-
else Try(AVAILABLE_TASKS(task).run(userId)) match {
21+
else Try(AVAILABLE_TASKS(task).run(userId, skipAlert)) match {
2122
case Success(_) => logger.info(s"$task Success!")
2223
case Failure(e) => logger.error(s"$task Failed!", e)
2324
}

src/main/scala/org/occidere/githubwatcher/service/ElasticService.scala

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ import com.fasterxml.jackson.databind.ObjectMapper
44
import com.fasterxml.jackson.module.scala.DefaultScalaModule
55
import com.sksamuel.elastic4s.requests.searches.SearchIterator
66
import com.sksamuel.elastic4s.{ElasticClient, ElasticProperties}
7+
import org.apache.http.auth.{AuthScope, UsernamePasswordCredentials}
78
import org.apache.http.client.config.RequestConfig
9+
import org.apache.http.impl.client.BasicCredentialsProvider
10+
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder
811
import org.occidere.githubwatcher.logger.GithubWatcherLogger
912
import org.occidere.githubwatcher.vo._
1013

@@ -19,13 +22,23 @@ import scala.util.Try
1922
*/
2023
object ElasticService extends GithubWatcherLogger {
2124
private lazy val MAPPER = new ObjectMapper().registerModule(DefaultScalaModule)
25+
26+
private val esUsername = sys.env.get("gw_es_username")
27+
private val esPassword = sys.env.get("gw_es_password")
28+
2229
private lazy val client = ElasticClient(
2330
com.sksamuel.elastic4s.http.JavaClient(
2431
ElasticProperties(s"http://${sys.env.getOrElse("gw_es_endpoint", "localhost:9200")}"),
2532
(requestConfigBuilder: RequestConfig.Builder) => requestConfigBuilder
2633
.setSocketTimeout(60000)
2734
.setConnectTimeout(10000)
28-
.setConnectionRequestTimeout(10000)
35+
.setConnectionRequestTimeout(10000),
36+
// Set credentials if exist
37+
(httpClientBuilder: HttpAsyncClientBuilder) => httpClientBuilder.setDefaultCredentialsProvider(
38+
new BasicCredentialsProvider() {
39+
if (hasCredentials) setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(esUsername.get, esPassword.get))
40+
}
41+
)
2942
)
3043
)
3144

@@ -77,6 +90,8 @@ object ElasticService extends GithubWatcherLogger {
7790

7891
def close(): Unit = client.close()
7992

93+
private def hasCredentials = esUsername.isDefined && esPassword.isDefined;
94+
8095
private def scrollFilterSearch[T](index: String, queryString: String, dataType: Class[T]): List[T] = SearchIterator.hits(client,
8196
search(index)
8297
.bool(boolQuery().filter(query(queryString)))

src/main/scala/org/occidere/githubwatcher/task/FollowerWatchTask.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import org.occidere.githubwatcher.vo.FollowerDiff
1212
*/
1313
object FollowerWatchTask extends Task with GithubWatcherLogger {
1414

15-
override def run(userId: String): Unit = {
15+
override def run(userId: String, skipAlert: Boolean = false): Unit = {
1616
logger.info(s"User ID: $userId")
1717

1818
// Data from GitHub API
@@ -31,7 +31,7 @@ object FollowerWatchTask extends Task with GithubWatcherLogger {
3131
logger.info(s"Not changed followers: ${diff.notChangedFollowerLogins.size}")
3232

3333
// Send line message if follower changed
34-
if (diff.hasChanged) LineMessengerService.sendFollowerMessage(diff)
34+
if (diff.hasChanged && !skipAlert) LineMessengerService.sendFollowerMessage(diff)
3535

3636
// Update DB to latest data including repos
3737
latestUser.followerLogins = diff.newFollowerLogins ++ diff.notChangedFollowerLogins

src/main/scala/org/occidere/githubwatcher/task/ReactionWatchTask.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import scala.util.{Failure, Success, Try}
1414
* @since 2020-09-23
1515
*/
1616
object ReactionWatchTask extends Task with GithubWatcherLogger {
17-
override def run(userId: String): Unit = {
17+
override def run(userId: String, skipAlert: Boolean = false): Unit = {
1818
logger.info(s"User ID: $userId")
1919

2020
// Fetch reactions from Issues
@@ -30,7 +30,7 @@ object ReactionWatchTask extends Task with GithubWatcherLogger {
3030
// Diff & Send line message
3131
val changedReactions = latestReactions.filter(latest => {
3232
val diff = ReactionDiff(prevReactions.getOrElse(latest.uniqueKey, copyReactionWithoutCounts(latest)), latest)
33-
Try(if (diff.hasChanged) LineMessengerService.sendReactionMessage(diff)) match {
33+
Try(if (diff.hasChanged && !skipAlert) LineMessengerService.sendReactionMessage(diff)) match {
3434
case Failure(e) =>
3535
logger.error(s"${latest.uniqueKey} process failed (htmlUrl: ${latest.htmlUrl})", e)
3636
false

src/main/scala/org/occidere/githubwatcher/task/RepositoryWatchTask.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import scala.util.{Failure, Success, Try}
1414
*/
1515
object RepositoryWatchTask extends Task with GithubWatcherLogger {
1616

17-
override def run(userId: String): Unit = {
17+
override def run(userId: String, skipAlert: Boolean = false): Unit = {
1818
logger.info(s"User ID: $userId")
1919

2020
// Latest repos from API
@@ -38,7 +38,7 @@ object RepositoryWatchTask extends Task with GithubWatcherLogger {
3838
logger.info(s"Repo: ${diff.repoName} (changed: ${diff.hasChanged})")
3939

4040
// Send message
41-
Try(if (diff.hasChanged) LineMessengerService.sendRepositoryMessage(diff)) match {
41+
Try(if (diff.hasChanged && !skipAlert) LineMessengerService.sendRepositoryMessage(diff)) match {
4242
case Failure(exception) =>
4343
logger.error(s"${latest.name} process failed", exception)
4444
false

src/main/scala/org/occidere/githubwatcher/task/Task.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ package org.occidere.githubwatcher.task
77
* @since 2020-09-22
88
*/
99
trait Task {
10-
def run(userId: String): Unit
10+
def run(userId: String, skipAlert: Boolean = false): Unit
1111
}

0 commit comments

Comments
 (0)