ActivityWatch / aw-server-rust

High-performance implementation of the ActivityWatch server, written in Rust
Mozilla Public License 2.0
170 stars 51 forks source link

aw-watcher-jetbrains fails with aw-server-rust #174

Open timwsuqld opened 3 years ago

timwsuqld commented 3 years ago

https://github.com/OlivierMary/aw-watcher-jetbrains

Running activitywatch-0.9.2

There seems to be an issue with the JSON being sent, but because we don't appear to have --log-json in aw-server-rust I can't work out what the issue is.

This is the output from aw-server-rust

[2020-10-05][11:30:52][rocket::rocket][INFO] POST /api/0/buckets/aw-watcher-PhpStorm_L0365/events application/json; charset=utf-8:
[2020-10-05][11:30:52][_][INFO] Matched: POST /api/0/buckets/<bucket_id>/events (bucket_events_create)
[2020-10-05][11:30:52][_][ERROR] Couldn't parse JSON body: Error("invalid type: map, expected a sequence", line: 1, column: 0)
[2020-10-05][11:30:52][_][INFO] Outcome: Failure
[2020-10-05][11:30:52][_][WARN] Responding with 422 Unprocessable Entity catcher.
[2020-10-05][11:30:52][_][INFO] Response succeeded.

And this is debugging from aw-server showing the json (edited to protect some data)

2020-10-05 11:36:46 [DEBUG]: Received post request for event in bucket 'aw-watcher-PhpStorm_L0365' and data: {'timestamp': '2020-10-05T11:36:43.909+08:00', 'duration': 2.031, 'data': {'file': '/src/app/Repository/CardRepository.php', 'project': 'intranet', 'projectPath': '/home/timw/src/app', 'language': 'PHP', 'editor': 'PhpStorm', 'editorVersion': '2020.2.2', 'eventType': 'fr.mary.olivier.aw.watcher.listener.RAVisibleAreaListener'}}  (aw_server:168)
2020-10-05 11:36:46 [DEBUG]: 200 (127.0.0.1): POST /api/0/buckets/aw-watcher-PhpStorm_L0365/events HTTP/1.1  (flask:25)

I'm not sure if this is a bug in aw-server-rust or aw-watcher-jetbrains, but there is a compatability issue. If you can let me know what the problem is (and/or how to get log-json in aw-server-rust) then I can help aw-watch-jetbrains implement the fix if that's what's needed.

johan-bjareholt commented 3 years ago

I think the reason is that aw-server-python accepts both a list of events as well as a signe event on the /api/0/buckets/bucketname/events endpoint while aw-server-rust only accepts a list of events so it's not really 100% API compatible.

I think it's better if a HTTP endpoint only accepts a single type for its request as that makes the API consistent and easier to document so I'd prefer that the watcher changed the way it sends events. Do you agree @ErikBjare?

ErikBjare commented 3 years ago

@johan-bjareholt I agree.

I also notice that aw-watcher-jetbrains seems to not use the heartbeat API, which may make it unreliable.

Edit: Looks like it is pretty unreliable and doesn't work as is intended. See https://github.com/OlivierMary/aw-watcher-jetbrains/issues/61 and https://github.com/OlivierMary/aw-watcher-jetbrains/issues/30.