metro.thing: Multi-instance monitoring (maybe managment) app for Windows.

Hi syncthusiasts,

inspired by the work of @canton7 with SyncTrayzor and the whole Syncthing team, disappointed with btsync, I grabbed my towel and worked for week on a prototype to monitor (and later manage) multiple Syncthing instances in one native windows UI. The REST API is great and offered most of the stuff I needed the complete it. It is based on NET 4.5 for Windows, released open source with MIT on github. Not sure if everything went correct, I’m still pretty inexperienced with the whole release-thing in the open-source domain.

Features that should work so far are:

Monitoring: - CPU / RAM usage - Connectivity (ICMP ping and API ping) - Version check - Transfer speeds - Connected discovery nodes - Total folder and device count (with smaller statistics)

Device ID: - Copy to clipboard - QR code display

Other: - Upgrading the Syncthing version

A screenshot is also available:

If you feel like it, I would love some feedback, ideas or general impressions to decide if I should continue with the work. Feel free to visit the thing on for details.

Have a nice day!

1 Like

Make sure to add it to community contributions in the Wiki

Looks damn awesome.

Thanks, will do tomorrow!

I guess these .NET APIs you’re using are not part of the open sourced .NET code?

Edit: Nope, it compiles cleanly but errors with

System.DllNotFoundException: user32.dll at (wrapper managed-to-native) MetroFramework.Native.WinApi:GetSystemMenu (intptr,bool) at MetroFramework.Forms.MetroForm.RemoveCloseButton () [0x00000] in :0 at MetroFramework.Forms.MetroForm.OnLoad (System.EventArgs e) [0x00000] in :0 at System.Windows.Forms.Form.OnLoadInternal (System.EventArgs e) [0x00029] in /private/tmp/source-mono-mac-3.12.99-branch-32/bockbuild-mono-3.12.0-branch/profiles/mono-mac-xamarin/build-root/mono-3.12.1/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Form.cs:2902

Not for OSX/Linux :frowning: Nice interface!

No, I don’t think so. At least the UI lib seems to use alot of native features, the other libs/code as well. Not even sure if the open .NET code even supports any non-web approach yet.

Looks great, I’m going to test this out now.

Nice one! I like it :+1:

I’m trying to get this working on my local machine using HTTPS but keep getting “Could not establish trust relationship for the SSL/TLS secure channel”

Ah thats something I did not test again, will check it right now.

Nice one, whilst you’re at it I don’t suppose you could adjust the Device Display bit to show how many devices you’re connected to out of the total? We have 19 devices and it always displays 19 regardless of connection state so 5/19 etc would be perfect :smile:

Can do that… later :smiley: Just pushed v0.1.1 with the SSL fix out, would be great if you could test it again. Keep in mind that the instances might get lost, still digging through the “manual” for that part. I’ll try to come up with a backup/restore thing until that part is solved.

HTTPS now works fine :smile:

Pushed an update again. Count with [connected devices / total devices] is in now. You can import and export your configuration as well… though you still might loose the settings again with this release. But the newly generated backup XML should be easy to read and modify. PS: How is the CPU usage of the thing with so many instances?

I don’t have all of the instances on there, just my machine and the server. Sorry.

Here is my feedback:

  • Such a cool interface! Wao!

  • It seems, that is not possible to change the settings, at the moment.

  • Translation into german language.

  • When I connect to my Galaxy Tab 3, I see a red cross. Hovering with the mouse shows: “Could not check version. Ungültige Daten auf Stammebene. Zeile 1, Position 1.” I guess, this is an issue for @Nutomic

  • Aren’t the global announce servers stored in the xml backup file?

  • When a connection is lost, it lasts for a relative long time (~1-2 min.), that the “white rotating circle” get a notice of this event and starts to indicate this. On the other side: when the connection is available again, metro.thing notices this much sooner.

One question for my special configuration:

I want to use a connection from my UWE-PC with metro.thing to an other pc (which has syncthing installed) SERVICE-PC over the internet. (On the SERVICE-PC also runs the discosrv.) But I can only connect with metro.thing, when the VPN connection between UWE-PC and SERVICE-PC is activated. Which configuration is necessary? I have configured at the router of the other network.

Last but not least: Thank you for this WONDERFUL piece of software!



That is correct. You can, however, edit the XML that you can backup/restore through the settings for slight modifications. Looking into this after some refactoring.

That’s a error message that the response content was to be expected XML, but was not. Most likely a HTTP error, which is not catched/passed correctly. I’ll look into it!

No, they are configured on every syncthing instance. Every instance could have a different set of announce-servers. Maybe you are looking for something else? Not sure :smile: Right now its only monitoring, no managment sadly, so I do not write configurations back to the monitored instances.

Yeah, there are alot of timeouts involved and a thread is checking in the background if the machine is available through ICMP and/or an API call. How exactly do you loose the connection? I can look into it if you can give me some details how.

So you want to monitor SERVICE-PC, while not in VPN, on the UWE-PC? You need to open the web GUI port on the SERVICE-PC towards your UWE-PC. Lets say SERVICE-PC:8080 gives you the web GUI for the locally installed Syncthing instance. You need to open this port on to the internet (but first activate SSL and password protect it, by setting admin and password!). Then you connect from UWE-PC to SERVICE-PC on the port you forwarded to the internet side and use the dyndns-IP as host.

I hope that helps and thanks for the feedback!