If you want to do this, what you probably want is to pump your logs into a log drain, something like betterstack is good. They then allow you to set up discrepancy thresholds and can send you emails when something seems to be out of the ordinary. There’s probably a self hosted thing that works the same way but I’ve never found a simple setup. You can do the whole Prometheus, influxdb, grafana setup but imo it’s too much work, and then you still have to set up email smtp separate from that.
That would fill the same role as watchtower I guess? I’ve previously tried to have a look at having portainer manage the docker compose stack that it’s running inside but at least back then it seemed to be a dead end and not really what portainer is meant to do. I’m not interested in moving away from docker compose at this time.
You should definitely figure out some infra as code system now while it’s manageable. Normally I’d recommend docker-compose as it’s very easy to learn and has a huge ecosystem, but since you’re using proxmox you might need to look at ansible like the other commenter said. Having IaC with git makes it so much easier to test new stuff, roll changes back, and all that good stuff, in addition to solving your original problem of forgetting what is running where.
Just find the simplest IaC solution possible. Unless you are gunning for a job in infrastructure you don’t need to go into kubernetes or terraform or anything like that, you just need something reproducible that you can easily understand and modify.
Well at least php has it, which is a JITed scripting language just like Python. Although saying php has it is wrong, it’s just a special doc tag that the linters pick up. Which is exactly what I want for Python. The only other scripting language I’m very comfortable with is typescript, which can also support @throws
via jsdoc and eslint.
So to answer your question, I don’t know if it’s common, but from my minimal sample pool it’s at least not unheard of.
You may not know this (just guessing because you commented on the nature of scripting/interpreted languages) but static analysis of dynamic languages has come really far and is an indispensable part of any reasonably sized project written in them these days. That’s another reason why I’m so surprised and frustrated by the lack of this in Python.
I believe raises is the de facto Python version of throws
, but no tools seem to exist to actually handle it.
Day 598 of asking for a way to tell which functions throw exceptions in Python so I can know when to wrap in try catch. Seems to me that every other language has this, but when I’ve asked for at least a linter that can tell me I’m calling a function that throws, the general answer has been “why would you want that?”
How am I supposed to ask for forgiveness if it’s impossible to know that I’m doing something risky in the first place?
Quick feedback: your css transitions are way too long, opening the hamburger menu should not make me feel like I’m waiting for it to open.
Also you’ve gone for the card layout on the app list, however cards create the expectation that they are actionable yet clicking them does nothing. At least make the app names clickable.
This is great but I literally can’t use the base app on my S20. Like clicking on Google search hits causes the app to freeze. Trying to scroll up on a page triggers a reload 30% of the time. I want to use Firefox but it’s nowhere near good enough, and adding extensions on top of that state is not going to help.
TTL on all content scales extremely poorly. You touch on this but I don’t think you appreciate just hope big of a SELECT * WHERE TTL ...
this would be in just a few months/years.
As an alternative, every instance sync should come with a list of newly deleted users. Retrying would not need to be reimplemented. If a user who wishes to be forgotten has had their home instance go dark, there will need to be a way for them to prove ownership over the original account (signup confirmation email perhaps) so a delete can be started from a foreign instance.
I honestly just did it to try to get cleaner logs having the container only be responsible for the proxying.