@@ -23,7 +23,9 @@ import java.util.UUID
23
23
import kotlin.concurrent.timerTask
24
24
25
25
const val TIMER_DELAY = 100
26
- const val TIMER_PERIOD = 100
26
+ const val TIMER_PERIOD = 30 * 1000
27
+ const val PLUGIN_NAME = " codetime-jetbrains"
28
+ const val PLUGIN_VERSION = " 0.0.7"
27
29
28
30
class CodeTimeProjectManagerListener : ProjectManagerListener {
29
31
private val log: Logger = Logger .getInstance(" CodeTime" )
@@ -43,10 +45,15 @@ class CodeTimeProjectManagerListener : ProjectManagerListener {
43
45
Timer ().scheduleAtFixedRate(
44
46
timerTask {
45
47
if (Queue .logQueue.size > 0 ) {
46
- while (true ) {
47
- val event: MutableMap <String , Any > = Queue .logQueue.poll() ? : break
48
- submitEventLog(project, uuid, event)
48
+ val events: MutableList <MutableMap <String , Any >> = ArrayList ()
49
+ val total = Queue .logQueue.size
50
+ var idx = 0
51
+ while (idx < total) {
52
+ val event = Queue .logQueue.poll()
53
+ events.add(event)
54
+ idx++
49
55
}
56
+ submitEventLog(project, uuid, events)
50
57
}
51
58
},
52
59
toLong(TIMER_DELAY ),
@@ -63,20 +70,24 @@ class CodeTimeProjectManagerListener : ProjectManagerListener {
63
70
)
64
71
}
65
72
66
- private fun submitEventLog (project : Project , uuid : String , event : MutableMap <String , Any >) {
73
+ private fun submitEventLog (project : Project , uuid : String , events : MutableList < MutableMap <String , Any > >) {
67
74
val projectPath: String? = project.guessProjectDir()?.path
68
- val absoluteFile = event[" absoluteFile" ]
69
- event[" project" ] = project.name
70
- event[" platform" ] = System .getProperty(" os.name" )
71
- event[" platformVersion" ] = System .getProperty(" os.version" )
72
- event[" platformArch" ] = System .getProperty(" os.arch" )
73
- event[" editor" ] = ApplicationNamesInfo .getInstance().fullProductName
74
- event[" editorVersion" ] = ApplicationInfo .getInstance().fullVersion
75
- event[" sessionID" ] = uuid
76
- event[" relativeFile" ] = projectPath?.let { absoluteFile.toString().removePrefix(it) } ? : " "
77
- Fuel .post(" https://codetime-api.datreks.com/eventLog" )
75
+ for (event in events) {
76
+ val absoluteFile = event[" absoluteFile" ]
77
+ event[" project" ] = project.name
78
+ event[" platform" ] = System .getProperty(" os.name" )
79
+ event[" platformVersion" ] = System .getProperty(" os.version" )
80
+ event[" platformArch" ] = System .getProperty(" os.arch" )
81
+ event[" editor" ] = ApplicationNamesInfo .getInstance().fullProductName
82
+ event[" editorVersion" ] = ApplicationInfo .getInstance().fullVersion
83
+ event[" sessionID" ] = uuid
84
+ event[" plugin" ] = PLUGIN_NAME
85
+ event[" pluginVersion" ] = PLUGIN_VERSION
86
+ event[" relativeFile" ] = projectPath?.let { absoluteFile.toString().removePrefix(it) } ? : " "
87
+ }
88
+ Fuel .post(" https://codetime-api.datreks.com/batchEventLog" )
78
89
.header(" token" , PluginStateComponent .instance.state.token)
79
- .jsonBody(Klaxon ().toJsonString(event )).responseJson() { _, _, result ->
90
+ .jsonBody(Klaxon ().toJsonString(events )).responseJson() { _, _, result ->
80
91
result.fold(
81
92
success = {
82
93
if (PluginStateComponent .instance.state.debug) {
0 commit comments