Giter Site home page Giter Site logo

occidere / githubnotifier Goto Github PK

View Code? Open in Web Editor NEW
6.0 3.0 1.0 119 KB

Integrated messeage notification system for various GitHub events

License: Apache License 2.0

Java 100.00%
java github api elasticsearch line spring-boot spring-data gradle githubaction database

githubnotifier's Introduction

GithubNotifier (Deprecated)

HitCount Gradle Build Java Version GitHub license


โš  This project has been moved to GithubWatcher

This repository will not be updated more. Project should countinue in GithubWatcher





Multi-purpose github event notification batch.

Currently Follower change notification, Stargazer / Watcher / Fork change notification are on service, and all changes notified by Line messages.

Using Github API to fetch User's github informations, and Elasticsearch as main database.


Features

1. Follower change notification

Notify follower change both increase and decrease.

Examples

image


2. Repository change notification

Notify Stargazer / Watcher / Fork change both increase and decrease.

Examples

image


Work Flow

  1. Get latest information of user and repository from Github API
  2. Get previous information of user and repository from database (Elasticsearch)
  3. Comparing both of them to find changes
    • Increase/Decrease of Followers
    • Increate/Decrease of Stargazers
    • Increate/Decrease of Watchers
    • Increate/Decrease of Forks
  4. Send notification message on Line
  5. Save latest information on database

Build

Command Line

On-premise Gradle

gradle build

Gradle Wrapper

./gradlew build

githubnotifier's People

Contributors

occidere avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

rheehot

githubnotifier's Issues

Seperate steps to multiple job

Seperate steps to multiple job

AS-IS

  • Job 1
    • Step 1
      • Follower Notification Step
      • Repository Notification Step

TO-BE

  • Job 1
    • Step 1
      • Follower Notification Step
  • Job 1
    • Step 1
      • Repository Notification Step

Retry when request got timeout exception

Retry when request got timeout exception

Issue

  • Apply retry policy when github api request got timeout exception.

Log

<summary>more</summay>
[githubRepositoryNotificationJob] $ /bin/sh -xe /tmp/jenkins3051647181965525707.sh
+ export githubnotifier_elasticsearch_endpoint=occiderepi403:9200
+ export githubnotifier_line_channel_token=VaM1JIVv8bGPjl149nelhiDMpmDaPKw9sFuoApNr5jUVHNk8jT6SywV1VKCm1vJJUVhSpfVJGE6r6seYglGoWm45lH47o06DCH+k1vFxVROaCnBMVQBXoUmrEMuOjxsUMdv3D80WQOmoLuaT0VGX2gdB04t89/1O/w1cDnyilFU=
+ export githubnotifier_line_bot_id=U35110a5cfbba06655cd40e4db2ac5326
+ export githubnotifier_github_api_token=b8dc977711ce5a3c52319f8e6338394a47a1f181
+ java -jar /home/occidere/deploy/GithubNotifier/githubnotifier-0.0.1-SNAPSHOT.jar --job.name=githubRepositoryNotificationJob userId=occidere

 .   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/  ___)| |_)| | | | | || (_| |  ) ) ) )
 '  |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::        (v2.2.6.RELEASE)

2020-04-12 05:10:10.642  INFO 26334 --- [           main] o.o.g.GithubNotifierApplication          : Starting GithubNotifierApplication on occiderepi302 with PID 26334 (/home/occidere/deploy/GithubNotifier/githubnotifier-0.0.1-SNAPSHOT.jar started by occidere in <http://180.68.52.149:8888/job/githubRepositoryNotificationJob/ws/)>
2020-04-12 05:10:10.676  INFO 26334 --- [           main] o.o.g.GithubNotifierApplication          : No active profile set, falling back to default profiles: default
2020-04-12 05:10:14.143  INFO 26334 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Elasticsearch repositories in DEFAULT mode.
2020-04-12 05:10:14.227  INFO 26334 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 49ms. Found 0 Elasticsearch repository interfaces.
2020-04-12 05:10:14.987  INFO 26334 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Elasticsearch repositories in DEFAULT mode.
2020-04-12 05:10:15.421  INFO 26334 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 432ms. Found 2 Elasticsearch repository interfaces.
2020-04-12 05:10:15.470  INFO 26334 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Reactive Elasticsearch repositories in DEFAULT mode.
2020-04-12 05:10:15.515  INFO 26334 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 44ms. Found 0 Reactive Elasticsearch repository interfaces.
2020-04-12 05:10:21.926  WARN 26334 --- [           main] o.s.data.convert.CustomConversions       : Registering converter from class org.springframework.data.geo.Point to interface java.util.Map as writing converter although it doesn't convert to a store-supported type! You might want to check your annotation setup at the converter implementation.
2020-04-12 05:10:21.935  WARN 26334 --- [           main] o.s.data.convert.CustomConversions       : Registering converter from interface java.util.Map to class org.springframework.data.geo.Point as reading converter although it doesn't convert from a store-supported type! You might want to check your annotation setup at the converter implementation.
2020-04-12 05:10:21.944  WARN 26334 --- [           main] o.s.data.convert.CustomConversions       : Registering converter from class org.springframework.data.elasticsearch.core.geo.GeoPoint to interface java.util.Map as writing converter although it doesn't convert to a store-supported type! You might want to check your annotation setup at the converter implementation.
2020-04-12 05:10:21.948  WARN 26334 --- [           main] o.s.data.convert.CustomConversions       : Registering converter from interface java.util.Map to class org.springframework.data.elasticsearch.core.geo.GeoPoint as reading converter although it doesn't convert from a store-supported type! You might want to check your annotation setup at the converter implementation.
2020-04-12 05:10:24.479  WARN 26334 --- [/O dispatcher 1] org.elasticsearch.client.RestClient      : request [PUT http://occiderepi403:9200/github-repos/_mapping/_doc?master_timeout=30s&include_type_name=true&timeout=30s] returned 1 warnings: [299 Elasticsearch-7.5.0-e9ccaed468e2fac2275a3761849cbee64b39519f "[types removal] Using include_type_name in put mapping requests is deprecated. The parameter will be removed in the next major version."]
2020-04-12 05:10:25.373  WARN 26334 --- [/O dispatcher 1] org.elasticsearch.client.RestClient      : request [PUT http://occiderepi403:9200/github-users/_mapping/_doc?master_timeout=30s&include_type_name=true&timeout=30s] returned 1 warnings: [299 Elasticsearch-7.5.0-e9ccaed468e2fac2275a3761849cbee64b39519f "[types removal] Using include_type_name in put mapping requests is deprecated. The parameter will be removed in the next major version."]
2020-04-12 05:10:29.812  INFO 26334 --- [           main] o.o.g.GithubNotifierApplication          : Started GithubNotifierApplication in 23.345 seconds (JVM running for 28.784)
2020-04-12 05:10:29.821  INFO 26334 --- [           main] o.s.b.a.b.JobLauncherCommandLineRunner   : Running default command line with: [--job.name=githubRepositoryNotificationJob, userId=occidere]
2020-04-12 05:10:29.839  WARN 26334 --- [           main] o.s.b.c.c.a.DefaultBatchConfigurer       : No datasource was provided...using a Map based JobRepository
2020-04-12 05:10:29.839  WARN 26334 --- [           main] o.s.b.c.c.a.DefaultBatchConfigurer       : No transaction manager was provided, using a ResourcelessTransactionManager
2020-04-12 05:10:29.969  INFO 26334 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : No TaskExecutor has been set, defaulting to synchronous executor.
2020-04-12 05:10:30.196  INFO 26334 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : Job: [SimpleJob: [name=githubRepositoryNotificationJob]] launched with the following parameters: [{run.id=1, userId=occidere, -job.name=githubRepositoryNotificationJob}]
2020-04-12 05:10:30.614  INFO 26334 --- [           main] o.s.batch.core.job.SimpleStepHandler     : Executing step: [githubRepositoryNotificationStep]
2020-04-12 05:10:30.972  INFO 26334 --- [           main] .g.b.GithubRepositoryNotificationTasklet : User ID: occidere
2020-04-12 05:10:51.048 ERROR 26334 --- [           main] o.s.batch.core.step.AbstractStep         : Encountered an error executing step githubRepositoryNotificationStep in job githubRepositoryNotificationJob

org.springframework.web.client.HttpServerErrorException$BadGateway: 502 Bad Gateway: [{
 "message": "Unexpected problem serving your request. Please try again and contact us at https://github.com/contact if the problem persists including D174:2FA6:118EB:1C08F:5E922447 in your message."
}
]
    at org.springframework.web.client.HttpServerErrorException.create(HttpServerErrorException.java:108) ~[spring-web-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:172) ~[spring-web-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:112) ~[spring-web-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) ~[spring-web-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:782) ~[spring-web-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:740) ~[spring-web-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:714) ~[spring-web-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:632) ~[spring-web-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.occidere.githubnotifier.service.GithubApiService.getAllRawData(GithubApiService.java:101) ~[classes!/:na]
    at org.occidere.githubnotifier.service.GithubApiService.getForksLogins(GithubApiService.java:75) ~[classes!/:na]
    at org.occidere.githubnotifier.batch.GithubRepositoryNotificationTasklet.fillLoginsIntoRepos(GithubRepositoryNotificationTasklet.java:87) ~[classes!/:na]
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na]
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1654) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na]
    at org.occidere.githubnotifier.batch.GithubRepositoryNotificationTasklet.execute(GithubRepositoryNotificationTasklet.java:56) ~[classes!/:na]
    at org.occidere.githubnotifier.batch.GithubRepositoryNotificationTasklet$$FastClassBySpringCGLIB$$be6792fb.invoke(<generated>) ~[classes!/:na]
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:136) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:124) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.occidere.githubnotifier.batch.GithubRepositoryNotificationTasklet$$EnhancerBySpringCGLIB$$3f1db1c1.execute(<generated>) ~[classes!/:na]
    at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:407) ~[spring-batch-core-4.2.1.RELEASE.jar!/:4.2.1.RELEASE]
    at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:331) ~[spring-batch-core-4.2.1.RELEASE.jar!/:4.2.1.RELEASE]
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140) ~[spring-tx-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.batch.core.step.tasklet.TaskletStep$2.doInChunkContext(TaskletStep.java:273) ~[spring-batch-core-4.2.1.RELEASE.jar!/:4.2.1.RELEASE]
    at org.springframework.batch.core.scope.context.StepContextRepeatCallback.doInIteration(StepContextRepeatCallback.java:82) ~[spring-batch-core-4.2.1.RELEASE.jar!/:4.2.1.RELEASE]
    at org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:375) ~[spring-batch-infrastructure-4.2.1.RELEASE.jar!/:4.2.1.RELEASE]
    at org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:215) ~[spring-batch-infrastructure-4.2.1.RELEASE.jar!/:4.2.1.RELEASE]
    at org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:145) ~[spring-batch-infrastructure-4.2.1.RELEASE.jar!/:4.2.1.RELEASE]
    at org.springframework.batch.core.step.tasklet.TaskletStep.doExecute(TaskletStep.java:258) ~[spring-batch-core-4.2.1.RELEASE.jar!/:4.2.1.RELEASE]
    at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:208) ~[spring-batch-core-4.2.1.RELEASE.jar!/:4.2.1.RELEASE]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:136) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:124) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at com.sun.proxy.$Proxy71.execute(Unknown Source) ~[na:na]
    at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:148) ~[spring-batch-core-4.2.1.RELEASE.jar!/:4.2.1.RELEASE]
    at org.springframework.batch.core.job.AbstractJob.handleStep(AbstractJob.java:410) ~[spring-batch-core-4.2.1.RELEASE.jar!/:4.2.1.RELEASE]
    at org.springframework.batch.core.job.SimpleJob.doExecute(SimpleJob.java:136) ~[spring-batch-core-4.2.1.RELEASE.jar!/:4.2.1.RELEASE]
    at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:319) ~[spring-batch-core-4.2.1.RELEASE.jar!/:4.2.1.RELEASE]
    at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:147) ~[spring-batch-core-4.2.1.RELEASE.jar!/:4.2.1.RELEASE]
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50) ~[spring-core-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:140) ~[spring-batch-core-4.2.1.RELEASE.jar!/:4.2.1.RELEASE]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration$PassthruAdvice.invoke(SimpleBatchConfiguration.java:127) ~[spring-batch-core-4.2.1.RELEASE.jar!/:4.2.1.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) ~[spring-aop-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
    at com.sun.proxy.$Proxy68.run(Unknown Source) ~[na:na]
    at org.springframework.boot.autoconfigure.batch.JobLauncherCommandLineRunner.execute(JobLauncherCommandLineRunner.java:192) ~[spring-boot-autoconfigure-2.2.6.RELEASE.jar!/:2.2.6.RELEASE]
    at org.springframework.boot.autoconfigure.batch.JobLauncherCommandLineRunner.executeLocalJobs(JobLauncherCommandLineRunner.java:166) ~[spring-boot-autoconfigure-2.2.6.RELEASE.jar!/:2.2.6.RELEASE]
    at org.springframework.boot.autoconfigure.batch.JobLauncherCommandLineRunner.launchJobFromProperties(JobLauncherCommandLineRunner.java:153) ~[spring-boot-autoconfigure-2.2.6.RELEASE.jar!/:2.2.6.RELEASE]
    at org.springframework.boot.autoconfigure.batch.JobLauncherCommandLineRunner.run(JobLauncherCommandLineRunner.java:148) ~[spring-boot-autoconfigure-2.2.6.RELEASE.jar!/:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784) ~[spring-boot-2.2.6.RELEASE.jar!/:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:768) ~[spring-boot-2.2.6.RELEASE.jar!/:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:322) ~[spring-boot-2.2.6.RELEASE.jar!/:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.2.6.RELEASE.jar!/:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) ~[spring-boot-2.2.6.RELEASE.jar!/:2.2.6.RELEASE]
    at org.occidere.githubnotifier.GithubNotifierApplication.main(GithubNotifierApplication.java:13) ~[classes!/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) ~[githubnotifier-0.0.1-SNAPSHOT.jar:na]
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) ~[githubnotifier-0.0.1-SNAPSHOT.jar:na]
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:51) ~[githubnotifier-0.0.1-SNAPSHOT.jar:na]
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52) ~[githubnotifier-0.0.1-SNAPSHOT.jar:na]

2020-04-12 05:10:51.091  INFO 26334 --- [           main] o.s.batch.core.step.AbstractStep         : Step: [githubRepositoryNotificationStep] executed in 20s475ms
2020-04-12 05:10:51.169  INFO 26334 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : Job: [SimpleJob: [name=githubRepositoryNotificationJob]] completed with the following parameters: [{run.id=1, userId=occidere, -job.name=githubRepositoryNotificationJob}] and the following status: [FAILED] in 20s695ms
Build step 'Execute shell' marked build as failure

Design Reaction Notification Job structure

Design Reaction Notification Job structure

Context

  • Targeting only specific repo or all repos?
  • Should containing reaction change of all comments in issues?
  • Considering build scheduling time.

Change RestTemplate to WebClient

Change RestTemplate to WebClient

Issue

  • In Spring 5.0, RestTemplate is deprecated
  • So, change RestTemplate to WebClient of WebFlux

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.