[Feature] Add support for HODL invoices

Feature description
Be able to create and pay HODL invoices
Describe the solution
Add the capability to create and pay HODL invoices. Creating HODL invoices is not possible at the moment. Paying HODL invoices seems to work (pending HTLCs are added) but Alby keeps loading after paying the HODL invoice. I guess it's waiting for a response that is not coming.
Describe alternatives
A first step to allow for the creation of HODL invoices could be to include it in the supported methods through webln.request(), e.g. AddHoldInvoice for LND.
Additional context
No response
Are you working on this?
None

Thanks for the initiative @LukasBahrenberg 🙌
I think it's also important to know the limitations and potential drawbacks of HODL invoices.

Limit of 483 concurrent HTLC payments per node
Locking liquidity from routing nodes along the payment route

📖 Resources:

https://lightningwiki.net/index.php/HODL_Invoice
https://bitcoin.stackexchange.com/questions/91168/what-are-the-downsides-of-hodl-invoices
https://bolt.fun/guide/invoices/hodl-invoice
https://twitter.com/Bumi/status/1604048430464086016

That being said, let's look into the 2 problems we are trying to solve here:
Adding HODL invoices
This could be integrated as a new method to webln.request() for LND:
https://lightning.engineering/api-docs/api/lnd/invoices/add-hold-invoice
I've created a PR to enable that:
#2151
For Core-Lightning I couldn't find a method to create HODL invoices.
Paying HODL invoices
The main difference between usual invoice payments and HODL invoice payments is that the invoice isn't immediately settled by the receiver. The payment dialog waits for the confirmation that could appear hours later (or never).
I think the client should know whether an invoice is supposed to be a "normal" invoice or a HODL one. So by offering a way for developers to set a timeout for those payments this could allow a better UX: (not having to ask users to close the window after X seconds)
webln.sendPaymentAsync(pr, timeout)
If the invoice is settled within the timeout the success screen is displayed as usual. If the timeout is reached we could display a message like "Payment in flight" and close the payment window after that?

@LukasBahrenberg Do you actually need a way to know the payment status of the paid HODL invoice as you call webln.sendPayment()?
Who generates those HODL invoices? Is it purely P2P? (so one user would generate one and send it to another user who then pays it) or is there a node under your control that issues those invoices?

I guess my service could also notify the user once it settles the invoice.

Exactly, if you are paying to your service you should already know whether an invoice has been settled or not.

It is actually both, the user creating and paying HODL invoices as well as my service creating and paying HODL invoices. So it is not purely P2P but the user and the service perform both tasks.

If you are creating HODL invoices on the client, who will settle them and when? Would you also need webln.request("settleinvoice") (LND docs) for that?

If you are creating HODL invoices on the client, who will settle them and when? Would you also need webln.request("settleinvoice") (LND docs) for that?

The HODL invoice the user creates is based on a hash to which the user does not hold the preimage. In my specific application the preimage is revealed by a third party based on some external logic at some point in the future. Once the user learns the preimage, they would need to settle the invoice with the method you are quoting.

You would need to trigger the settleinvoice call in your app, exactly. Granting permissions for this call could get rid of the permission popup, however your app would still need to be running (and maybe polling from this external service in the background)
So I suppose the problem here would be that you need to tell the user to come back to this page and settle certain invoices, right? 🤔

... Granting permissions for this call could get rid of the permission popup ...

That would make sense because the user claims funds through the settlement for themselves, which should not be to their disdvantage, unless I am overlooking something here ...

So I suppose the problem here would be that you need to tell the user to come back to this page and settle certain invoices, right? 🤔

I think that would be fine and one solution. The disadvantage is of course that the payment might timeout if the user does not run the app again.
However, I am also looking into some other options for the user to grant permissions to an external entity to settle the invoice on their behalf. This way, the user just needs to keep their node running and does not need to run the frontend app necessarily (e.g. through custom macaroons on LND). This would require a user, however, to run their own node and would not work with Alby's lndhub solution, I suppose.

That would make sense because the user claims funds through the settlement for themselves, which should not be to their disdvantage, unless I am overlooking something here ...

True. Currently all the webln.request methods share the same permission system (you as a user are always prompted for new API calls and can set permanent permissions via the "remember" checkbox) and we don't have method-specific handling. Something we might want to consider though.

Yes, it is an inconvencience but I think that could be fine and a solution. The disadvantage is of course that the payment will timeout if the user does not run the app again.

Okay, will that happen on a regular basis or is that rather the exception to the rule? What problem do you actually solve with the HODL invoice? Is it some kind of a deposit?

However, I am also looking into some other options for the user to grant permissions to an external entity to settle the invoice on their behalf.

Interesting 🤔 This is then very specific to the connector and will be limited to users having an own node. LNDHub currently doesn't allow you to create / settle HODL invoices and I most of the other connectors (LNBits, etc) won't offer this functionality as well.

Okay, will that happen on a regular basis or is that rather the exception to the rule?

Yes, it will happen on a regular basis. The main functionality of my service is based on this.

What problem do you actually solve with the HODL invoice? Is it some kind of a deposit?

The HODL invoice enables an atomic swap that both service and user commit to and is only settled once an external logic reveals the preimage. I am currently working on a writeup of the technical concept behind it. I am going to publish it at some point and then link it here as well.

LNDHub currently doesn't allow you to create / settle HODL invoices and I most of the other connectors (LNBits, etc) won't offer this functionality as well.

Okay, good to know. I haven't gone through all the options yet.

I am currently working on a writeup of the technical concept behind it. I am going to publish it at some point and then link it here as well.

Cool 😎
So would it help you already to add the create / settle HODL invoice calls? If yes I'd try to sneak that into the next release.

Nice, thanks for the quick response. I'll finish up the the PR. 🚀

As promised, this is the blog post explaining how I want to use the HODL invoices.

@reneaaron: Apologies for the very late response! Thanks again for implementing this.
I tested the webln.request() methods addholdinvoice and settleinvoice when connected to LND via Alby/REST. It works except for one (minor) thing:
I set a "remember" in Alby for webln.sendPayment() with a budget for my test site allowing me to make multiple payments in a row non-interactively. Now, if I try to pay multiple HODL invoices in a row, it throws me the following error and prevents me from running webln.sendPayment() again:
inpageScriptWebLN.bundle.js:1 Uncaught (in promise) Error: window.webln call already executing
    at r (inpageScriptWebLN.bundle.js:1:357)
r @ inpageScriptWebLN.bundle.js:1

I suppose this has to do with getting no response for webln.sendPayment() in case of paying a HODL invoice. This is not too bad as e.g. a page reload solves this. I wonder, however, what happens in the background. Is Alby still waiting for a response for all the paid HODL invoices? Does this accumulate somehow?

There is still the idea of sendPaymentAsync to prevent users from having to close the popup manually. Should we prioritize that?

There is no need to prioritize this for my sake at this point but it could solve the above mentioned problem too, right?
Thx again, Lukas

@LukasBahrenberg thanks for testing and reporting. Could you open an issue for this that we do not forget it.
Currently Alby protects the user from too many requests by the website and thus does not allow parallel requests - the hold invoice keeps the connection open, so this is a problem I guess.


Update report names in template

Minor issue: In the HPWH template, "old_nameplate_photo" was not displayed in the report section.
Fix: Adding a explicit null check resolved the issue. That fix is added in this PR


Move calculations

Closes #35
I also improved the directory structure.

That's impressive, nice work!

Thanks

No Problem!


Basic Travis: Does the app start?

travis builds the docker container, launches it, and makes sure there is an http response.


inline documentation rendered as eg. Markdown

This is from @pedromachado in slack:

I've been thinking that it would be good to have a documentation feature built into dbt. Perhaps something that could leverage 1) especially formatted comments embedded in the SQL and 2) the model dependency graph to generate some documentation or at least a diagram with all the tables/columns.

Incredible! This is absolutely where my head is at. I think this could look something like Javadoc.
That, coupled with some dbt queries to infer the schemas of the models, plus constraint info provided by schema tests, would be incredibly cool.

@dwallace0723 I understand that you've been doing some documentation work within a dbt project -- what kinds of things do you find yourself documenting? We've thought about

interactions between models
high-level information about specific models
information about the SQL within a model (eg. unusual sql, odd business logic, etc)

Is that about congruent with your experiences?

@drewbanin So far, I've been using documentation mostly for the third bullet point you listed. That being said, I can definitely see myself needing proper documentation for the first two bullets as well.
The way I've been doing this for now is having a comment above a line of SQL that links to the corresponding piece of documentation located in a .md file within the dbt project directory.
In practice, the flow looks like this:

Not the most seamless experience, but it gets the job done for now.

that is cool

I'd be interested in working with someone on a minimal initial version of this. I'd be perfectly happy with the following minimal features:

extraction of a block of markdown for each model
some sort of column-level syntax for documenting columns
ideally, an auto-generated list of models/tables used by the given model

Something like:
{{ usual dbt stuff goes here }}

--@ multiline block markdown goes here
--@ and here...
--@ don't really know if @ is the best character

SELECT
  cat,  --@col strays are not included
  dog1 AS dog --@col not the same as dog2!
FROM {{ ref('whatever') }}

Stripping these out via regex and dropping them into a single markdown or similar file shouldn't be a lot of work. Dealing with references wouldn't be too bad either. Thoughts? Tons of room for enhancements, but even this would be fantastic.

@HarlanH I'm super happy to see some pseudo code for this :)
I like the idea of using --@ for multi-line block comments, but regex parsing the raw SQL is a little scary to me. I've given this some thought, and I think the SQL implementation might have to look something like:
select
  {{ column('cat', comment='strays are not included') }},
  {{ column('dog1', as='dog', comment='not the same as dog2!') }}
from {{ ref('whatever') }}

^ I think that's super gross, and would prefer something that looks a little more like regular SQL.
Another option is to repurpose the schema.yml file that's currently used for testing. I can imagine something like this:
my_model:
  # same as before
  constraints:
    not_null:
      - field_1
      - field_2

  # also provide for block comments, etc
  documentation:
    - field: field_1
      comment: This field is made of grass

    - field: field_2
      comment: This field is made of Athenry

While this is obviously more readily parseable, i do really like the idea of colocating the docs with the code. There's also the question of where these markdown docs get compiled to, if they're versioned, etc etc. So, still some fundamental and unanswered questions here I think.
I'd love to keep pulling on this thread, so please let us know if you have more thoughts here!

I guess I'm OK with convention over code for the column docs, and agree that jinja's pretty ugly for this sort of thing. I also am unsure about how to handle the first of these:
(CASE WHEN campaign_id LIKE 'job-notification-email - weekly %' THEN 'weekly'
		  WHEN campaign_id LIKE 'job-notification-email - daily %' THEN 'daily'
		  WHEN campaign_id LIKE 'MPC%' THEN 'MPC'
		  WHEN campaign_id LIKE '%every_time%' then 'every_time'
		  ELSE NULL END)::varchar(25) AS campaign_type, -- @col one of daily, weekly, every_time, MPC
rcpt_to::varchar(254) AS user_email, -- @col envelope recipient

I definitely would not want to embed that in a jinja block... On the other hand, I'd expect the output as written to look something like:
* `campaign_type` (complex) -- one of daily, weekly, every_time, MPC
* `user_email` (`varchar(254)`, from `rcpt_to`) -- envelope recipient

At least that'd be perfectly adequate initially. If the line can't be parsed into <from_col>(::<cast>) (AS <to_col>)(,) -- @col <comment>, then do nothing.
I would prioritize in-line docs over a solution like leveraging the schema, even if it reduces functionality -- too much sad experience trying to keep separate files in sync!
On compilation, I was thinking of a dbt doc step that would compile them to a docs target directory, maybe initially to a single markdown file (a ToC would be cool). That could be run as part of dbt run, or not, I dunno.
On versioning, what do you have in mind?

I wrote a quick-and-dirty standalone script that seems to do a fair amount of what I want. It's regex-heavy, so a bit fragile, but seems to be a decent start.
https://gist.github.com/HarlanH/277006989774372515c7130e63809315

@HarlanH cool! Unsure if you're aware, but dbt generates a Networkx graph file in target/graph.gpickle when dbt compile or dbt run are invoked. That file contains all of the SQL models, as well as info about model materialization and macro/node dependencies. That file isn't currently documented anywhere, but you can read it with nx.read_gpickle(...) and take a look at the contents.

I also would prefer to define the comments in the model file, close to the query it documents. If the issue is parsing sql reliably, can we not define the commens in a block that is easy to isolate from the query, similar to the way configuration code is inserted? I would prefer a syntax that allows me to define start and end of comment block and to put comments in a very readable format. Something like yml could work but something less verbose would be even better.
As far a output, I would love to see an interactive, graphical representation of the network chart that shows the model doc and compiled sql upon you clicking a on a node. It would also be good to have a printable format but I don't know how to make this work with large graphs.

Pedro, yeah, the biggest design trade-off seems to me to be whether you want to wrap the SELECT columns in non-SQL syntax, ala Drew's suggestion, or if you want to try to parse the SQL (either buggily with regexes, or with a real parser), or if you want to force the author to repeat herself.
Drew, does the existing dbt implementation actually run a SQL parser at any point?

@HarlanH dbt does do an iota of sql parsing, but the plan is to get rid of that soon. I definitely think some sort of jinja function is the way to go here. For me, the core unanswered questions are:

What's a sane interface for defining these comments?
How much should dbt know about documentation?

For 1) I think we'll just need to play around with some different options. It could be jinja functions, or some sort of jinja block.... tbd
Point 2) is a little more open-ended. It's tempting to just write a ton of python code to generate markdown files, but I really like the idea of making dbt mostly unaware of things like documentation. Instead, dbt would provide all of the relevant information, and we could encode the documentation logic into something like a package which could very well be shipped along with dbt.
dbt already has a notion of "analysis" files which are compiled, but not executed. I think in a similar way, these docs would be "compiled" to markdown, but of course not executed. We'd just need to figure out templating, expose the list of models / comments in the context, and figure out how to change the output directory for the compiled markdown.
^ That's kind of where my head is at. Does that seem reasonable?

Hm, I don't really like this syntax for SELECT clauses, especially for really complex column definitions:
{{ column('cat', comment='strays are not included') }},
{{ column('dog1', as='dog', comment='not the same as dog2!') }}

Does the contents of a {{ }} block have to be Python? And/or is there some other way to use jinja to extract information out of the SQL?
Could something like this be made to work, or does it violate dbt design assumptions?
{% col  one of daily, weekly, every_time, MPC %}
(CASE WHEN campaign_id LIKE 'job-notification-email - weekly %' THEN 'weekly'
		  WHEN campaign_id LIKE 'job-notification-email - daily %' THEN 'daily'
		  WHEN campaign_id LIKE 'MPC%' THEN 'MPC'
		  WHEN campaign_id LIKE '%every_time%' then 'every_time'
		  ELSE NULL END)::varchar(25) {% AS %} campaign_type,
{% endcol %}
{% col envelope recipient %}
rcpt_to::varchar(254) {% AS %} user_email,
{% endcol %}
{% col user ID %}
id,
{% endcol %}

+1 to this feature! Ultimately, I want to build a databook (like this!) that is tightly coupled to my code - one thing I've thought about is if I could store these definitions in another table, similar to pg_table_def or information_schema.columns. That way I can pull out definitions pretty easily.
Something that I find interesting about this approach:
{{ column('cat', comment='strays are not included') }},
{{ column('dog1', as='dog', comment='not the same as dog2!') }}

is that you could then potentially open up the door to referencing previous columns when building fields (I miss this feature of LookML and find myself repeating code or having to write lots of cascading CTEs).
e.g. (running with cats and dogs, let's pretend this is a list of people in my office and the pets they own, and that the only pets you can have are cat or dogs)
{{ column('employee_id') }}
{{ column('number_of_cats', comment='strays are not included') }},
{{ column(col('number_of_cats') > 0 , as 'has_cat', comment='TRUE when number_of_cats > 0') }},
{{ column(col('number_of_cats') >= 3 , as 'is_crazy_cat_person', comment='TRUE when number_of_cats > 3') }},
{{ column('number_of_dogs', as='dog', comment='not the same as dog2!') }},
{{ column(col('number_of_dogs') > 0 , as 'has_dog', comment='TRUE when number_of_dogs > 0') }},
{{ column(col('has_cat') or col ('has_dog), as 'has_pet', comment='TRUE when has_cat or has_dog') }}

Agree that then gets a hard to read, and that probably strays too far from regular SQL, and also is not the point of this issue, but just a thought 😸

Funny I was thinking something exactly along the same lines as @HarlanH mentioned here parsing sql comments. What felt good about that was that it still serves some value as raw sql:
        number_of_cats, --@ strays not included
       number_of_dogs AS dog_number --@ also includes large hampsters

is still valid sql and even serves as local documentation if nothing else.
right now at the bottom of each analytics model we drop a config block with all the comments as post hooks; it is not perfect but at least they all live in the same file.
Another thing that seemed interesting would be a config value to "inherit" comments from ephemeral models - ie define the comments as far up the pipe as possible (or as close to the defining transforms as possible).

Just a note that I've got a lot of columns now that are defined by macros, so column comments often can't extract a useful name from the pre-macro SQL (although I suppose if the comment-extractor worked on the compiled versions? hm...)
...
{{ my_macro('thing', 'that', 'constructs', 'one or more', 'columns') }}, -- @col what am I supposed to do with this?
...


feat(eslint-config-fluid): Add plugins / recommended rules for React modules and pre-applies fixes

BREAKING CHANGE: Note that this is breaking for consumers using React code, as it adds new rules to be enforced.
Plugins being used:

eslint-plugin-react
eslint-plugin-react-hooks

These plugins were previously added to a couple of packages individually in:

#13958
#13943


Numeric dimensions (not metrics)

I recall pretty well that I had managed some time ago to do a proof-of-concept schema with numeric dimensions (not metrics).
I can't find any documentation on that subject.
I also recall that pivot would show something else than "ABC" when the dimension was created as a metric.
Am/Was I dreaming or is/was creating a numeric (int, ...) dimension (not metric) possible.

@julien-lecomte It is work in progress - https://github.com/druid-io/druid/pull/3217

Closing as of "stale", and also I don't use this project anymore.


Add geoviews.data package to installation

This is to fix an ImportError that gets raised by this line in geoviews for the "geoviews.data" package.

Thanks for getting to this so quickly. Shouldn't affect tests so I'll merge right away.

Sure, no problem. Thanks


Golang list of dependencies

I have a question concerning the handling of go. The point is, that a compiled go file contains the runtime, i.e., the oss dependencies of the project should contain the runtime packages as well as they are distribution relevant.
When I look at the output of ORT, it basically reflects the dependencies referenced in the go.mod file. To my understanding, this does not include the runtime of Go, but only the additional dependencies. If I call 'go list -m all' I get an even longer list of modules.
Is this an issue or do I misunderstand something here?

@fviernau probably is the best to answer this (once he's back from vacation next week).

Hi @blaumeiser-at-bosch ,
This is interesting! Could you please provide

The list (names) of the runtime packages you would expect to be included?
Ideally also a minimal project which reproduces the missing packages?

Hello @fviernau,
I did some small investigation with a Hello World example. There "go list -m all" only shows the module just created for the program. If I add a dependency, only the module itself and the dependency is shown. In our well grown project, I get 136 dependencies from this command with 34 modules referenced in the "go.mod" file. I used "go mod why" for some of the not listed dependencies and the result was, that the dependency had to be downloaded first and then the message was: "(main module does not need package honnef.co/go/tools) ". I have no clue, where this difference comes from as go typically also adds transitive dependencies into the "go.mod" file.
Besides that, when thinking about the issue, my point was, in a language like Java, if I do not distribute the JVM, all the standard dependencies are not part of my distribution, so it is ok to only take the input from the package manager for license fulfillment. In a language like go, where one statically linked executable is created, the runtime is part of the distribution, also the standard library packages like "fmt". But they are not mentioned by the package manager and they are included automatically by the tooling. So from a distribution perspective, these things have to be added to the referenced oss software, right? I have no idea, how to automatically find out, which standard packages there are and which are added to the binary.

Thanks @blaumeiser-at-bosch !

I used "go mod why" for some of the not listed dependencies and the result was, that the dependency had to be downloaded first and then the message was: "(main module does not need package honnef.co/go/tools) ". I have no clue, where this difference comes from as go typically also adds transitive dependencies into the "go.mod" file.

In general, I believe that the output does detect whether code is actually used. E.g. If you add a library as dependency you do not use, then go mod why would tell it is not needed. At the minimum go mo tidy would remove it again from the sum file. So, in your example has there been code usage of the mentioned libs.
Anyhow, it's really difficult for me to look into this without having it locally reproducible.
Would you mind providing a minimal example which is sufficient to work on this ?
(A requirement for such example would be that the go.mod file is aligned with what go mod tidy makes out of it).

Hi @fviernau, good point, the go.sum file contains these components, which are not referenced in the go.mod file. Even a "go mod tidy" did not change the content of the go.sum file. I can share the go.mod and go.sum file of our project, if that would help.
I just read some posts, that the go.sum file contains more dependencies needed by the dependency resolution and adding some transitive dependencies that are not necessarily required for runtime, but potentially for testing.
But still, my main concern is about the standard library and runtime that goes into the generated binary. This is not referred by any means, but still it is included in the binary, right?

Hi @fviernau, good point, the go.sum file contains these components, which are not referenced in the go.mod file. Even a "go mod tidy" did not change the content of the go.sum file. I can share the go.mod and go.sum file of our project, if that would help.

Yes, that would help.

But still, my main concern is about the standard library and runtime that goes into the generated binary. This is not referred by any means, but still it is included in the binary, right?

So, what would help me here (as I'm not a go developer) is a list of modules you expected to see-, but are not in the dependency tree.

Ping @haikoschol!

@blaumeiser-at-bosch The TL;DR is that any other runtime code the Go toolchain includes in the binaries that it builds is BSD licensed and copyrighted by "The Go Authors": https://go.dev/LICENSE
So essentially just include that in your NOTICE file or whatever other appropriate documentation you're distributing with the binary. (ORT can generate NOTICE files, right? Should this be hardcoded for Go projects then?)
All version of the Go standard library and toolchain so far have used the same license and copyright. I assume it will stay that way forever, but I couldn't find any statement regarding that.
There is some discussion of this topic in golang/go#19893 and here.
Regarding the issue what ORT includes as dependencies: The standard library is a collection of packages, but not a module. It predates modules and is not considered an external dependency of your code. What version of the standard library ends up in your binary depends on the version of the toolchain you use to build it.

When I look at the output of ORT, it basically reflects the dependencies referenced in the go.mod file. To my understanding, this does not include the runtime of Go, but only the additional dependencies. If I call 'go list -m all' I get an even longer list of modules.

Do you mean go list -m all returns more modules than what ORT lists as dependencies? I'm pretty sure those should be the same, so maybe there's a bug in the Analyzer.

Thanks, @haikoschol  for the information first of all!

(ORT can generate NOTICE files, right? Should this be hardcoded for Go projects then?)
That was actually my point, for Go projects, these are dependencies that should be part of the NOTICE file.

When I look at the output of ORT, it basically reflects the dependencies referenced in the go.mod file. To my understanding, this does not include the runtime of Go, but only the additional dependencies. If I call 'go list -m all' I get an even longer list of modules.

Do you mean go list -m all returns more modules than what ORT lists as dependencies? I'm pretty sure those should be the same, so maybe there's a bug in the Analyzer.

That is actually my observation. go list -m all returns the dependencies in the go.sum file as it seems, but there are more dependencies there at least in our project compared to go.mod. ORT returns only the dependencies found in the go.mod file. I attach the output of go list -m all here, as I wrote above, some of them when asked with go mod why` are declared as not used by main.
cloud.google.com/go v0.110.7
cloud.google.com/go/bigquery v1.8.0
cloud.google.com/go/compute v1.23.0
cloud.google.com/go/compute/metadata v0.2.3
cloud.google.com/go/datastore v1.1.0
cloud.google.com/go/firestore v1.13.0
cloud.google.com/go/longrunning v0.5.1
cloud.google.com/go/pubsub v1.3.1
cloud.google.com/go/storage v1.14.0
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9
github.com/BurntSushi/toml v0.3.1
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802
github.com/armon/go-metrics v0.4.1
github.com/bahlo/generic-list-go v0.2.0
github.com/buger/jsonparser v1.1.1
github.com/census-instrumentation/opencensus-proto v0.2.1
github.com/chigopher/pathlib v0.17.0
github.com/chzyer/logex v1.1.10
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1
github.com/client9/misspell v0.3.4
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403
github.com/coreos/go-semver v0.3.0
github.com/coreos/go-systemd/v22 v22.3.2
github.com/cpuguy83/go-md2man/v2 v2.0.3
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad
github.com/envoyproxy/protoc-gen-validate v0.1.0
github.com/fatih/color v1.14.1
github.com/frankban/quicktest v1.14.4
github.com/fsnotify/fsnotify v1.7.0
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4
github.com/gogo/protobuf v1.3.2
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da
github.com/golang/mock v1.4.4
github.com/golang/protobuf v1.5.3
github.com/google/btree v1.0.0
github.com/google/go-cmp v0.5.9
github.com/google/martian v2.1.0+incompatible
github.com/google/martian/v3 v3.1.0
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2
github.com/google/renameio v0.1.0
github.com/google/s2a-go v0.1.7
github.com/google/uuid v1.1.2
github.com/googleapis/enterprise-certificate-proxy v0.3.1
github.com/googleapis/gax-go/v2 v2.12.0
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8
github.com/hashicorp/consul/api v1.25.1
github.com/hashicorp/go-cleanhttp v0.5.2
github.com/hashicorp/go-hclog v1.5.0
github.com/hashicorp/go-immutable-radix v1.3.1
github.com/hashicorp/go-rootcerts v1.0.2
github.com/hashicorp/golang-lru v0.5.4
github.com/hashicorp/hcl v1.0.0
github.com/hashicorp/serf v0.10.1
github.com/iancoleman/orderedmap v0.3.0
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639
github.com/inconshreveable/mousetrap v1.1.0
github.com/invopop/jsonschema v0.12.0
github.com/invopop/yaml v0.2.0
github.com/josharian/intern v1.0.0
github.com/json-iterator/go v1.1.12
github.com/jstemmer/go-junit-report v0.9.1
github.com/kisielk/gotool v1.0.0
github.com/klauspost/compress v1.17.0
github.com/kr/fs v0.1.0
github.com/kr/pretty v0.3.1
github.com/kr/pty v1.1.1
github.com/kr/text v0.2.0
github.com/magiconair/properties v1.8.7
github.com/mailru/easyjson v0.7.7
github.com/mattn/go-colorable v0.1.13
github.com/mattn/go-isatty v0.0.17
github.com/minio/highwayhash v1.0.2
github.com/mitchellh/go-homedir v1.1.0
github.com/mitchellh/mapstructure v1.5.0
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
github.com/modern-go/reflect2 v1.0.2
github.com/nats-io/jwt/v2 v2.4.1
github.com/nats-io/nats.go v1.30.2
github.com/nats-io/nkeys v0.4.5
github.com/nats-io/nuid v1.0.1
github.com/pelletier/go-toml/v2 v2.1.0
github.com/pkg/errors v0.9.1
github.com/pkg/sftp v1.13.1
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4
github.com/rogpeppe/go-internal v1.9.0
github.com/russross/blackfriday/v2 v2.1.0
github.com/sagikazarmark/crypt v0.15.0
github.com/sagikazarmark/locafero v0.3.0
github.com/sagikazarmark/slog-shim v0.1.0
github.com/sourcegraph/conc v0.3.0
github.com/spf13/afero v1.10.0
github.com/spf13/cast v1.5.1
github.com/spf13/cobra v1.8.0
github.com/spf13/jwalterweatherman v1.1.0
github.com/spf13/pflag v1.0.5
github.com/spf13/viper v1.17.0
github.com/stretchr/objx v0.5.1
github.com/stretchr/testify v1.8.4
github.com/subosito/gotenv v1.6.0
github.com/wk8/go-ordered-map/v2 v2.1.8
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415
github.com/xeipuuv/gojsonschema v1.2.0
github.com/yuin/goldmark v1.2.1
go.etcd.io/etcd/api/v3 v3.5.9
go.etcd.io/etcd/client/pkg/v3 v3.5.9
go.etcd.io/etcd/client/v2 v2.305.9
go.etcd.io/etcd/client/v3 v3.5.9
go.opencensus.io v0.24.0
go.uber.org/atomic v1.11.0
go.uber.org/goleak v1.2.0
go.uber.org/multierr v1.11.0
go.uber.org/zap v1.26.0
golang.org/x/crypto v0.13.0
golang.org/x/exp v0.0.0-20231006140011-7918f672742d
golang.org/x/image v0.0.0-20190802002840-cff245a6509b
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028
golang.org/x/mod v0.13.0
golang.org/x/net v0.15.0
golang.org/x/oauth2 v0.12.0
golang.org/x/sync v0.3.0
golang.org/x/sys v0.14.0
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1
golang.org/x/text v0.14.0
golang.org/x/time v0.3.0
golang.org/x/tools v0.14.0
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2
google.golang.org/api v0.143.0
google.golang.org/appengine v1.6.7
google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb
google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb
google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13
google.golang.org/grpc v1.58.2
google.golang.org/protobuf v1.31.0
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15
gopkg.in/errgo.v2 v2.1.0
gopkg.in/ini.v1 v1.67.0
gopkg.in/natefinch/lumberjack.v2 v2.2.1
gopkg.in/yaml.v2 v2.2.2
gopkg.in/yaml.v3 v3.0.1
honnef.co/go/tools v0.0.1-2020.1.4
rsc.io/binaryregexp v0.2.0
rsc.io/quote/v3 v3.1.0
rsc.io/sampler v1.3.0

go list -m all returns the dependencies in the go.sum file as it seems, but there are more dependencies there at least in our project compared to go.mod.

The go.sum file is a distraction in this context. It is not a lockfile as they exist in other dependency management systems. It is used for integrity checking and is essentially append only. Whenever you update a dependency, the sum file will still contain references to the previous version(s) of that dependency.

ORT returns only the dependencies found in the go.mod file. I attach the output of go list -m all here, as I wrote above, some of them when asked with go mod why` are declared as not used by main.

A common source of confusion in the context of Go dependency management is “packages” vs “modules”.
The purpose of packages is to enable encapsulation and reusability. Code in a package is invoked using its import path. The import path can either refer to a package in the standard library, one on the local filesystem (including in $GOPATH pre-modules) or in a remote repository. In the latter case, the Go toolchain conveniently downloaded the code to $GOPATH/somewhere, even before modules existed. But this could not really be called dependency management.
From the output of go help modules:

A module is a collection of packages that are released, versioned, and distributed together.

Dependency management in Go operates on modules.
The various commands in the Go toolchain are quite confusing unfortunately. go list all lists packages. go list -m all lists modules. That makes sense. However, go mod why takes a list of packages and go mod -m why takes a list of modules. In the latter case it “finds a path to any package in each of the modules.” (citing go mod help why). But it outputs those paths only if it goes all the way to the main module. The main module is identified by the go.mod file in your repository.
I’m not completely sure about this, but IIRC, if go mod why says the given package or module is not needed by the main module, that means its code will not end up in the binary. However, this is further complicated by build flags. For example, a module could contain a package that only gets included when compiling on Windows (or setting GOOS=windows). Additionally there can be test packages, which are only compiled into test binaries.
I hope that helps clarify the output you get from these various commands and to use them effectively in case you need to investigate a license finding in an ORT report.

@blaumeiser-at-bosch, I sort of lost track in this issue about whether there's anything left to do on the ORT side... can you help me to understand?


Multiprocessing

This is a big one. I initially wanted to separate out the multiprocessing from resolution/bitrate/widescreen, but they became so critical to determining how many games can be run at the same time that it made sense to expose them to the configuration file.
I decided that these should go into the config file instead of arguments. I think that a config file is a better approach should we add a GUI in the future. Plus, many arguments could be annoying to keep track of in the command line.

Multiprocessing

When recording with a folder as the first argument, we can throw all the arguments into a multiprocessing pool and for record_single_slp to run against.
There was one bug that came out of this. Because all the arguments are thrown into a pool, I had to remove the ability to combine the files from a folder before finishing the entire pool. I documented this in the future work in the readme. But multiprocessing is so fast that it is worth it despite this hiccup.

Resolution

Vertical resolution in dolphin is controlled in GFX.ini through a parameter called EFBScale. To alter it, I used a library called configparser which is designed to parse ini files. Each instance of the DolphinRunner class having it's own User folder made this very simple, so I'm glad that was added. The one thing I spent forever on was that the game-specific settings would take priority of the GFX.ini settings. So I had to patch the dolphin sys game settings folder so EFBScale can be set.

Widescreen

Apply the 16:9 GFX aspect ratio and add the widescreen cheat to the list of enabled gecko codes.

Bitrate

Apply bitrate to GFX

I addressed comments so hopefully linux shouldn't see those problems now. I also made it so games that exceed the time don't raise an exception and stop the entire recording process.


Add middleware for mock MSI headers

Which issue this PR addresses:

Fixes https://issues.redhat.com/browse/ARO-9193
What this PR does / why we need it:

Middleware to mock MSI headers. For tenant ID, this should be set by developer. See this PR: https://github.com/Azure/ARO-RP/pull/3713/files
Test plan for issue:

Local/unit tests
Is there any documentation that needs to be updated for this PR?

How do you know this will function as expected in production?

/azp run ci, e2e

/azp run ci


Systems with multiple Null orbit points not rendered as intended

An example of a system not rendered as intended is the Farwell system, near Colonia.
It has Null orbit points between stars at CD and BCD,
This is an issue with how data is processed in the back end as well as how it is handled in the front end.
Both will need to be modified at the same time to improve this (without making things worse).

I keep pushing this one back because it's more work than a bunch of smaller improvements.
I hope to get round to it at some point!


In beta x86_64 image from 14th of October shaders do not work

In menu there are not just names of shaders but also paths. And it does not work.

This is what I found in es_launch_stderr.log:

2020-10-16 10:43:07 INFO (emulatorlauncher.py:88):main(): Running system: mastersystem
2020-10-16 10:43:07 DEBUG (unixSettings.py:21):init(): Creating parser for /userdata/system/batocera.conf
2020-10-16 10:43:07 DEBUG (unixSettings.py:82):loadAll(): Looking for global.* in /userdata/system/batocera.conf
2020-10-16 10:43:07 DEBUG (unixSettings.py:82):loadAll(): Looking for mastersystem.* in /userdata/system/batocera.conf
2020-10-16 10:43:07 DEBUG (unixSettings.py:82):loadAll(): Looking for mastersystem["Aladdin (Europe).zip"].* in /userdata/system/batocera.conf
2020-10-16 10:43:07 INFO (Emulator.py:33):init(): uimode: Full
2020-10-16 10:43:07 ERROR (emulatorlauncher.py:245):: configgen exception:
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/configgen/emulatorlauncher.py", line 243, in
exitcode = main(args, maxnbplayers)
File "/usr/lib/python2.7/site-packages/configgen/emulatorlauncher.py", line 89, in main
system = Emulator(systemName, args.rom)
File "/usr/lib/python2.7/site-packages/configgen/Emulator.py", line 38, in init
self.renderconfig = Emulator.get_generic_config(self.name, "/usr/share/batocera/shaders/configs/" + self.config["shaderset"] + "/rendering-defaults.yml", "/usr/share/batocera/shaders/con
figs/" + self.config["shaderset"] + "/rendering-defaults-arch.yml")
File "/usr/lib/python2.7/site-packages/configgen/Emulator.py", line 71, in get_generic_config
systems_default = yaml.load(file(defaultyml, "r"), Loader=yaml.FullLoader)
IOError: [Errno 2] No such file or directory: u'/usr/share/batocera/shaders/configs//usr/share/batocera/shaders/configs/zfast/rendering-defaults.yml'
2020-10-16 10:43:08 INFO (emulatorlauncher.py:247):: Exiting configgen with status -1

I made a dirty workaound just like that:
# pwd
/usr/share/batocera/shaders/configs/usr/share/batocera/shaders/configs
# ls -l
total 0
lrwxrwxrwx    1 root     root            41 Oct 16 10:50 zfast -> /usr/share/batocera/shaders/configs/zfast

Should be fixed with my recent PR. Wait for the next beta


fixed import URL, updating devServer to allow CORS

closing as import is now successful in https://github.com/Apicurio/apicurio-studio-react-poc/pull/41


support amp-iframe

I understand that this is not supported yet, but noting it as a feature request.
Are you interested in pull requests for other AMP tags such as this?

Definitely! I'll happily accept pull requests for all tag implementations.


Incompatible with Vite

Hi,
thanks for the nice wrapper.
Unfortunately it's incompatible with Vite,, because snoowrap uses the node libraries global and url e.g. here:
global[MODULE_NAME] = this._previousSnoowrap;

The main Vite/Vue developer says, packages shouldn't require node globals: https://github.com/vitejs/vite/issues/728#issuecomment-767168681
That makes sense, considering node libraries are only available in the browser by the use of bundlers like webpack.

Hey there, @SinBirb. I thought I would add a comment here to say that if you compile the code that uses snoowrap with webpack for UMD, it should work with vite.
I have an API that uses snoowrap which is compiled to UMD and used in the browser in my project which is built by vite.

You don't use this module on a browser environment directly, you should compile it or use the compiled version.

@SinBirb I managed to get it working with Vite on my fork, and now it's used officially as a dev server.
The fix wasn't hard tho, I used this config to ignore node builtins in browser:
var path = require('path')
var noop = path.resolve('./noop.js')

/** @type {import('vite').UserConfig} */
module.exports = {
  resolve: {
    alias: {
      fs: noop,
      path: noop,
      stream: noop,
      url: noop,
      ws: noop
    }
  }
}

Note that noop.js exports undefined, so I had to mess with imports and write further checks to ensure that node builtins won't be used on browser environments.
Snoowrap 2.0 will support Vite, work in progress...


NOISSUE - Move CLI documentation from getting started guide to separate page

Signed-off-by: Ivan Milošević<EMAIL_ADDRESS>What does this do?
Move CLI documentation from getting started guide to separate page
Which issue(s) does this PR fix/relate to?
No issue

Codecov Report

Merging #470 into master will increase coverage by 0.08%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #470      +/-   ##
==========================================
+ Coverage   87.43%   87.52%   +0.08%
==========================================
  Files          54       54
  Lines        2372     2372
==========================================
+ Hits         2074     2076       +2
+ Misses        196      194       -2
  Partials      102      102

Impacted Files
Coverage Δ

things/service.go
93.47% <0%> (+1.44%)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 1566712...fa1896f. Read the comment docs.


Launch RabbitMQ with configuration

Launching RabbitMQ and setting up its queues/exchanges/vhost/... programmatically (thru a client) can be tedious. Another approch is to setup the configuration at startup through config files. The tradeoff is that the setup is fixed, but this is not a problem in this project.

[x] find references/tutorials on how to configure rabbitmq at start
[x] experiment the potential solutions
[x] validate using DockerHub' official RabbitMQ image

@pgraverdy
I have completed the task as follows:

Created a customised definitions.json file with the 3 different sensors for receiving messages from 3 different sources. I added a direct exchanger and binder with specific keys to route the different messages to their particular queues.
The I downloaded the docker image for rabbitmq and uploaded the definitions.json file using the RabbitMQ management UI.
Checked if the messages were being sent and received by the particular queues or not and it worked just fine.

The 3 queues name: sensor_1, sensor_2, sensor_3
Corresponding binding keys: first_sensor, second_sensor, third_sensor
Exchanger name: exchanger
What are your thoughts on this?
Should I upload the 'definitions .json' files to the repo?

@azlaanmsamad
Yes, please, make a branch "2_rabbitmq" and put the file(s) and update the readme with

the command to launch the docker container with the config
how to check all is fine (URL to the localhost/<IP_ADDRESS> manager/status page)

@pgraverdy
I have done as stated and waiting for you to review the PR i have created.
Two questions:
When does one close an issue? after PR is merged?
Also can either one of us close the issue or its the person who created it should only close it?

@azlaanmsamad
For issues where you create a branch to solve it, you use a keyword in the PR description so that when the PR is approved/merged, the issue is automatically closed.
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue
So yes, an issue is closed when the PR is merged (you can put a line "closes #2" in the PR description).
For issues and PR, you can have both "assignee" and 'reviewers". It's often the same for small projects. The difference is only important for large projects with many developpers with different responsabilitties

the assignee is in charge of merging the PR (has the authority to do this).
the reviewer chacks/validates the changes, and reports to the assignee

https://docs.github.com/en/issues/tracking-your-work-with-issues/assigning-issues-and-pull-requests-to-other-github-users
https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews
https://stackoverflow.com/questions/41087206/on-github-whats-the-difference-between-reviewer-and-assignee
So here, the workflow coud be

since you created the PR, you are the assignee
you put me as a reviewer, I check and validate
then you merge

@pgraverdy
Thank you for the detailed explanation and the important links, certainly cleared a lot of my doubts.


Implement: Parameter-Driven Bit width assignment in SV/Verilog files from input file formats

Hi Taichi,
Implementation of parameter usage for Bit width assignment in input file formats and corresponding generation in System Verilog and Verilog Files
In the current implementation, the bit width assignment is being used in the input format (XLSX) as hard coded values. This has been identified as a potential issue as it would be more appropriate to use the 'PARAMETER' instead. The expected behavior is to use the 'PARAMETER' in place of hardcode values for bit assignment in the input format and generate the 'PARAMETER' in the System Verilog (SV) and Verilog files.
This change will ensure that the 'PARAMETER' is consistently used across all files, improving the readability, reusability and maintainability of the code.
I have spent quite a time trying to work this out with no success, so I thought I would ask for your help. This requires a feature enhancement in the Ruby script to support the ‘PARAMETER’, ensuring its correct usage in SV and Verilog files.

Hi @pratheekjain ,
Thank you for opening the issue!
It's difficult to add such feature to an input file formats because it will need a lot of changes.
You can do use variables on your register map files if you can select Ruby file as an input file like below.
width = 4
register_block {
  name 'block_0'
  byte_size 256

  register {
    name 'register_0'
    bit_field { name 'bit_field_0'; bit_assignment width: width; type :rw; initial_value 0 }
    bit_field { name 'bit_field_1'; bit_assignment width: width; type :rw; initial_value 0 }
  }
}

But generated RTL does not have parameters showing such variables.

@pratheekjain ,
Can you close this issue?

Hi @pratheekjain ,
Thank you for opening the issue! It's difficult to add such feature to any input file formats because it will need a lot of changes.
You can do use variables on your register map files if you can select Ruby file as an input file like below.
width = 4
register_block {
  name 'block_0'
  byte_size 256

  register {
    name 'register_0'
    bit_field { name 'bit_field_0'; bit_assignment width: width; type :rw; initial_value 0 }
    bit_field { name 'bit_field_1'; bit_assignment width: width; type :rw; initial_value 0 }
  }
}

But generated RTL does not have parameters showing such variables.

Okay, Thank you @taichi-ishitani .

@pratheekjain , Can you close this issue?

Okay


Superclass of Host

Should be union-of dwc:Taxon and :Stratum - i.e. OR, not AND.

Else I'm not understanding what a 'Stratum' is - I only know it in context of vegetation surveys, though I'm aware the term is also used in statistical sampling.

The intention behind the superclass 'Stratum' was to define the 'thing' on which a pest was found. Surveillance observations either record the "Host" (usually a plant) or the 'Substrate' (non-living material, eg a rock). So, 'Host' should be a subclass of Taxon and of 'Stratum'.
See  http://linked.data.gov.au/def/phs#Stratum
I chose 'Stratum' for its root meaning of 'layer', something on which something else could rest, But since 'Stratum' usually has a geological meaning, maybe we can find a better word?
Note that I called it an 'abstract' class, by which I meant that no instance data will ever use it in its range.

Stratum is probably OK in this context. But I was trying to understand if the combination of super-classes was what you intended. As currently axiomatized, every Host is both a Taxon and a Stratum. I'm not sure that was what you intended. If you want every Host to be either a Taxon and a Stratum then the super-class must be a union-class.
Separately, I also think you've got Taxon wrong - see #18

We are now modelling Host and Substrate as subclasses of sosa:Platform.
The fact that a host is a living organism is secondary to its primary role, which is the thing on which a target pest may be resting.

Platform - A Platform is an entity that hosts other entities, particularly Sensors, Actuators, Samplers, and other Platforms.


Typo

Noticed typos in the article. References to "Lighting aura components" should be replaced to say "Lightning aura components"

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: b5821622-a34a-d094-789a-f790c9b16204
Version Independent ID: 53d46759-dd85-c50b-cf64-7b4dd3015d3a
Content: Use embedded analytics to embed Power BI content in Salesforce - Power BI
Content Source: powerbi-docs/developer/embedded/embed-power-bi-salesforce.md
Service: powerbi
Sub-service: powerbi-developer
GitHub Login: @KesemSharabi
Microsoft Alias: kesharab

Thanks for your observation, @CrystalsForce. I have directed it to the doc author for consideration.

Hi @CrystalsForce,
Thanks for catching this typo and letting us know. It's now fixed - see Lightning Aura.
Thanks,
Kesem


fix error build

add "#include " , because  -  error: ‘function’ is not a member of ‘std’

Thx for the PR. Can you post the compiler you're getting this error? I've recently added CI (with gcc, clang and msvc) and none of them failed due to the missing include.

compiler -  gcc-7.0.1.

output errors, without "functional" - https://paste.fedoraproject.org/paste/ZSNrG2A86mY10NrDqJcK315M1UNdIGYhyRLivL9gydE=/raw


Error: Get socket.io 404 error

I try to run the package but received this error:
<IP_ADDRESS>:51474 - "GET /socket.io/?EIO=3&transport=polling&t=NOi5NZ- HTTP/1.1" 404 Not Found
This is my code
from fastapi import FastAPI
from fastapi_socketio import SocketManager

app = FastAPI()

sio = SocketManager(app=app, cors_allowed_origins=["*"])

@app.get("/")
def read_root():
    return {"Hello": "World"}

@sio.on('connect')
async def connect():
    print('connect')

if __name__ == '__main__':
    import logging
    import sys

    logging.basicConfig(level=logging.DEBUG,
                        stream=sys.stdout)

    import uvicorn

    uvicorn.run("main:app", host='<IP_ADDRESS>',
                port=8000, reload=True, debug=False)

Hey @msyazwan thanks for reporting. Mount location. for socket.io is on /ws so what you could actually do is change a resource on the clientside like so:
var io = require('socket.io').listen(app, { resource: '/ws/socket.io' });
You can also change  mount location on the SocketManager, but they may be some conflicts with FastAPI routes (that's why the default mount location is set to /ws).
i.e. sio = SocketManager(app=app, cors_allowed_origins=["*"], mount_location='/')
NOTE: Be careful with changing the mount location.

got the same issue with the similar code =\ i think problem is on the FastAPI side...
routes are exactly right

got the same issue with the similar code =\ i think problem is on the FastAPI side...
routes are exactly right

Yeah I'm still can't get this working. My frontend is just a simple HTML file and I call socket io from CDN.

@msyazwan @makusudi Can you share your client code where you're connecting to websocket using socket.io library?

@pyropy @msyazwan finally i did it, see this comment and versions of required libraries

@pyropy
server
from fastapi import FastAPI
from fastapi_socketio import SocketManager
from starlette.middleware.cors import CORSMiddleware

app = FastAPI()
origins = ["http://<IP_ADDRESS>:9999"]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

sio = SocketManager(app=app)

client
const SIGNALING_SERVER_URL = 'ws://<IP_ADDRESS>:8000';
let socket = io(SIGNALING_SERVER_URL, {autoConnect: false});

I get errors
socket.io.js:4545 GET http://<IP_ADDRESS>:8000/socket.io/?EIO=4&transport=polling&t=NVQVnsV 400 (Bad Request)
I was installed latest version of packages.

I build a little demo to tryout bidirectional communication via websockets in FLASK, which worked ok. Now I am trying to do the same setup with FastAPI (and fastapi-socketio instead of flask-socketio) which fails to connect, displaying the same error. Can someone explain what I am doing wrong? Thank you in advance!
index.html:
<!DOCTYPE html>

  <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

Websocket Demo

 Press below to display something send from Server

  <form id="start" method="post" action="#">
    <input type="submit" value="Start">
  </form>

  <form id="stop" method="post" action="#">
    <input type="submit" value="Stop">
  </form>

 Log

mainSocket.py
from fastapi import FastAPI
from fastapi_socketio import SocketManager
from fastapi.responses import HTMLResponse

app = FastAPI()
socket_manager = SocketManager(app=app)

html = ""
with open('index.html', 'r') as f:
    html = f.read()

@app.get("/")
async def get():
    return HTMLResponse(html)

@app.sio.on('client_connect_event')
async def handle_client_connect_event(message):
    print(message)
    await app.sio.emit('server_antwort01', {'data': 'connection was successful'})

@app.sio.on('client_start_event')
async def handle_client_start_event(message):
    print('Server says: start_event worked')
    print(message)
    await app.sio.emit('server_antwort01',{'data':'start event worked'})

@yellowMtn Hi there, I took a look at your code and here's some changes that I made in order to get it working.
I've updated your mainSocket.py file with proper argument for socket.io handler functions. Here's an updated example.
from fastapi import FastAPI
from fastapi_socketio import SocketManager
from fastapi.responses import HTMLResponse

app = FastAPI()
socket_manager = SocketManager(app=app)

html = ""
with open('index.html', 'r') as f:
    html = f.read()

@app.get("/")
async def get():
    return HTMLResponse(html)

@app.sio.on('client_connect_event')
async def handle_client_connect_event(sid, *args, **kwargs):
	await app.sio.emit('server_antwort01', {'data': 'connection was successful'})

@app.sio.on('client_start_event')
async def handle_client_start_event(sid, *args, **kwargs):
	print('Server says: start_event worked')
	await app.sio.emit('server_antwort01',{'data':'start event worked'})

In the client code I've changed connection string from http://localhost:8000/ws to ws://localhost:8000. Here's an full updated example:
<!DOCTYPE html>

	<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

Websocket Demo

 Press below to display something send from Server

	<form id="start" method="post" action="#">
		<input type="submit" value="Start">
	</form>

	<form id="stop" method="post" action="#">
		<input type="submit" value="Stop">
	</form>

 Log

Let me know if you have more questions. To all other people involved in the conversation I would like to apologise for not being active recently.

If someone is facing a problem connecting the client with the server despite everything being correctly configured do not forget to add transportation property on the client as is mentioned here https://github.com/miguelgrinberg/python-socketio/issues/205#issuecomment-647045744.
transports: ['websocket', 'polling', 'flashsocket']


Binary targets for FreeBSD in Beta4 no longer working

Bug description
Previously an environment variable could be set to point to a binary compiled for FreeBSD. Like so:
export PRISMA_QUERY_ENGINE_BINARY=/usr/home/downloads/bin/query-engine
Now, with Beta 4 I get the following error:
Warning Precompiled binaries are not available for freebsd.
Warning Precompiled binaries are not available for freebsd.
Error: Unknown binaryTargets freebsd

How to reproduce
Here is the simple Bash script I'm running on FreeBSD 12.1:
#!/bin/sh
export PRISMA_QUERY_ENGINE_BINARY=/usr/home/downloads/bin/query-engine
export PRISMA_MIGRATION_ENGINE_BINARY=/usr/home/downloads/bin/migration-engine
export PRISMA_INTROSPECTION_ENGINE_BINARY=/usr/home/downloads/bin/introspection-engine
cd /usr/home/downloads/
prisma generate

Expected behavior
I expect the CLI is able to compile.
Prisma information
All 2.0-Beta4
Environment & setup

OS: FreeBSD 12.1
Database: PostgreSQL
Prisma version: 2.0.0-beta.4
Node.js version: v13.3.0
Query engine: afd294205618b1c825b013ba6f5a6ebe4aa4a514

yarn global list
yarn global v1.19.1
info "<EMAIL_ADDRESS>has binaries:
   - prisma
   - prisma2

I can confirm this issue:
Version used:
Warning Precompiled binaries are not available for freebsd.
Warning Precompiled binaries are not available for freebsd.
@prisma/cli          : 2.0.0-alpha.1188
Current platform     : freebsd
Query Engine         : query-engine fc45fde2be3f39a089ade64c5c480b7ac30af461 (at /home/harshit/test/query-engine, resolved by PRISMA_QUERY_ENGINE_BINARY)
Migration Engine     : migration-engine-cli fc45fde2be3f39a089ade64c5c480b7ac30af461 (at /home/harshit/test/migration-engine, resolved by PRISMA_MIGRATION_ENGINE_BINARY)
Introspection Engine : introspection-core fc45fde2be3f39a089ade64c5c480b7ac30af461 (at /home/harshit/test/introspection-engine, resolved by PRISMA_INTROSPECTION_ENGINE_BINARY)

FreeBSD freebsd-s-1vcpu-1gb-blr1-01 12.1-RELEASE-p2 FreeBSD 12.1-RELEASE-p2 GENERIC  amd64

Internal note: I have left the setup that I used to reproduce this in digitalocean so that we can easily reproduce it again while fixing this without having to spin up a freebsd vm again.

Thanks a lot for reporting :pray:
This issue is fixed in the latest alpha version of @prisma/cli 2.0.0-alpha.1196
You can try it out with npm i -g @prisma/cli@alpha.


Support Unix sockets

📑 I have found these related issues/pull requests
Related issues/pulls are only about monitoring Docker containers, while this issue is about monitoring Unix sockets on host system.
🏷 Feature Request Type
New monitor
🔖 Feature description
It is about supporting Unix sockets on Unix(-like) systems, usually located in /var/run/*.sock.
✔ Solution
I want to be able to select Unix socket monitor type when creating such and filesystem path where my socket is located.
❓ Alternatives
No response
📝 Additional Context
No response

What would you like to monitor specifically?

What would you like to monitor specifically? (to prevent an XY-Problem)

Edited, see first post.

Could you do a proxy like socat TCP-LISTEN:12345,reuseaddr,fork UNIX-CONNECT:/var/run/weblate.sock to convert between TCP and unix sockets?


Fixed two typos in the README

I noticed two small typos in the README that I fixed:

"Acts" was wrong because it does not have the correct subject-verb agreement
"Who Have" is the wrong pronoun to use when referring to companies. "That have" is the grammatically correct option.
Additionally, my company, Let's Roam, uses superset to visualize people completing challenges all over the world.

CATEGORY
Choose one

[ ] Bug Fix
[ ] Enhancement (new features, refinement)
[ ] Refactor
[ ] Add tests
[ ] Build / Development Environment
[x] Documentation

SUMMARY

BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF

TEST PLAN

ADDITIONAL INFORMATION

[ ] Has associated issue:
[ ] Changes UI
[ ] Requires DB Migration.
[ ] Confirm DB Migration upgrade and downgrade tested.
[ ] Introduces new feature or API
[ ] Removes existing feature or API

REVIEWERS

Codecov Report

Merging #9305 into master will not change coverage by %.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master    #9305   +/-   ##
=======================================
  Coverage   59.08%   59.08%
=======================================
  Files         374      374
  Lines       12202    12202
  Branches     2986     2986
=======================================
  Hits         7209     7209
  Misses       4814     4814
  Partials      179      179

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f6f40c8...72d8e95. Read the comment docs.


Use Torchvision augmentations instead of Kornia, which work with TPUs

This commit substitutes the Kornia augmentations in the BYOL class with
augmentations which come from the torchvision package.
Apparently, Kornia augmentations were the culprit for the error
of issue #33
The example train.py script works on Colab TPUs out of the box after this
commit (not considering Lightning's problem here, which can be solved by changing a line in the pytorch_lightning.utilities.xla_device_utils module).

@umbertov looks great!!! I graciously accept this :D


Proposed 1.8.0-b4

If merged this PR will:
close: #3887
close: #3876
close: #3842
close: #3867
close: #3865
close: #3823
close: #3874
close: #3864
close: #3861
close: #3863
close: #3859
close: #3848
close: #3770
close: #3846

It looks like a few of the passed pull requests may have been omitted.  Maybe I'm not reading the list correctly.  Were any of the passed pull requests intentionally omitted?  The one's I'm not seeing are:

https://github.com/ripple/rippled/pull/3869
https://github.com/ripple/rippled/pull/3815
https://github.com/ripple/rippled/pull/3813

@scottschurr some of them are a
The PR: Fix compilation of krb5 dependency with GCC 10 and Clang 10 #3813 is already in develop (https://github.com/ripple/rippled/blob/develop/Builds/CMake/deps/cassandra.cmake)
Fix crash in SQL interface in the case use_tx_tables = 0 #3815 is orphaned and Nik is figuring it out the best way to include it.
Will add these in the next beta we do next week


Enhancements

First of all great work! Looks really awesome. Though I have a few enhancement requests to make it even greater! 👍

[ ] Select all monitors at once to pause them: at the moment you have to pause them all manually one by one
[ ] Scheduled pausing: for scheduled maintenance, server reboot etc
[x] Retries: for instance 3 retries in xx seconds before a service is being marked as down
[x] Accepted HTTP codes: I would like to add status codes to some HTTP request, 401 for instance (#173 )
[x] Public dashboard: create a status page where monitors can be shown but not edited
[x] 2FA: would be great to have 2FA (Google auth, Authy etc) for logging in with the admin account
[x] Send notification/alert after xx time: have an interval for sending notifications, to avoid small downtimes
[x] Reset/delete up/downtime history: be able to delete the history for a monitor (after history delete it's 100% up again)
[x] Version number on webinterface (thx @rezzorix)
[x] Link to this github page (thx @rezzorix)
[ ] Monitor groups: e.g. Server1, Server2 etc. (thx @LeviSnoot)
[ ] Re-order monitors: create your own list priority (thx @LeviSnoot)
[ ] Combined monitors : A monitor that looks at two instances but is displayed as one and/or has a dropdown to show all contained (thx @LeviSnoot)
[x] Dark mode: based on system settings (thx @LeviSnoot)
[ ] Incident reports: ties into public status page, the ability to write a message relating to the status of a monitor, with a status on each message such as "⛔ Investigating", "⚠ Resolving" and "✔ Resolved". (thx @LeviSnoot)
[x] White labeling public status page with custom logo, page title and favicon - that said there should obviously still be credit to the project, maybe in the form of a footer or something (thx @LeviSnoot)
[ ] Pagination: next page for the Dashboard / Dashboard of each monitor (thx @rezzorix)
[x] Import/export monitors list as JSON (thx @kvpt)
[x] Add the possibility to define an announcement (thx @kvpt)
[ ] Ability to use a separate docker container as the database e.g. mariadb (thx @joe-eklund)
[ ] Ability to authenticate with digest or basic auth (thx @joe-eklund)
[x] Heartbeat monitoring, instead of pinging services, those services must check in (thx @joe-eklund)
[x] Able to ignore SSL issues for specific monitors (thx @joe-eklund)
[ ] User management with LDAP and oAuth. This would allow us to use our built in user management tools instead of having to create yet another user for people that need access. (thx @joe-eklund)
[x] Ability to set default notifications in settings so you don't have to select each time you create a new monitor
"Check now" button to perform a check a single monitor right away (thx @parityhero)
[x] Tags to group monitors with filtering: by tag, by type (thx @parityhero)
[ ] More information about monitor: date created, last modified etc. (thx @parityhero)
[x] Ability to SMTP multiple email addresses or CC/BCC (thx @parityhero)
[ ] Personnalize notifications for texts / icons to be used, depending on private/public channels for example (thx @magicgg91)
[x] Check certficate validity and expiration time  (thx @magicgg91)
[ ] Ability to configure how long the monitor history is retained. A global setting to automatically delete monitor entries older than ${x} days would declutter the user interface. (thx @Spiritreader)
[ ] Ability for a "Bulk Upload" via csv etc (thx @EclipseOfficeTech)

Keep up the good work!
[updates]
2021-07-15 @ 3.20pm UTC:
Formatting changed to checkboxes per request @louislam
2021-07-15 @ 4.00pm UTC:
Added enhancements requested by @kvpt
2021-07-17 @ 8.00am UTC:
Added enhancements requested by @joe-eklund
2021-07-19 @ 8.02am UTC:
Added enhancements requested by @parityhero
2021-07-21 @ 9.04am UTC:
Added enhancements requested by @magicgg91
2021-07-29 @ 1.40pm UTC:
Added enhancements requested by @Spiritreader & @EclipseOfficeTech

Adding some more simple enhancements to this list above:

version number on webinterface
link to this github page

Added them to my post! Thanks @rezzorix

Added a few more myself as well. ;-)

Great list! Here's some thoughts of my own:

Monitor groups (e.g. Server1, Server2 etc.)
Reorder monitors
Combined monitors (A monitor that looks at two instances but is displayed as one and/or has a dropdown to show all contained)

Thanks @LeviSnoot
Added your enhancements to my post to have a complete list.

Would be good if other users add to this thread here more, instead of opening a new one for every single idea they have :)
One addition:

"Pause all" or "Pause Groups" could be helpful.

Sometimes I have a service update running interrupting service to several or all services... that results in a lot notifications :D

@rezzorix
Indeed would be handy to post here I guess.
Your addition is already in:
Select all monitors at once to pause them: at the moment you have to pause them all manually one by one

Very important and easy to implement:

Pagination

Pagination (next page) for the Dashboard / Dashboard of each monitor.
Also maybe for the monitor list on the left.
Just auto separate after every 10, 20, xx pages.
I have setup 10 monitors for different services. Some go off for a bit and on again.
Because of that the dashboard is currently already quite long ... and gets longer and longer ... :)

@rezzorix added to the list!

Two more suggestions:
Import/export monitors list as JSON
Scenario

Add and test monitor in local docker
Export JSON from local
Import JSON in production

Add the possibility to define an announcement
To announce a specific event, like a maintenance or an hardware failure
The announcement is visible in the dashboard header, we can opt-in if a notification is sent or not

@kvpt added them to the list!

Here are some additional enhancement's I would like to see (in addition to the ones above):

Ability to use a separate docker container as the database (e.g. mariadb).
Ability to authenticate with digest or basic auth.
Heartbeat monitoring (instead of pinging services, those services must check in).
Able to ignore SSL issues for specific monitors.
User management with LDAP and oAuth. This would allow us to use our built in user management tools instead of having to create yet another user for people that need access.

Some additional thoughts on SSL: for anyone who has to deal with custom certs like I do, if you do the following you can inject your own CA or ignore all SSL cert issues for all monitors by doing the following (note this is a docker stack file for docker swarm, but docker-compose is close):
version: "3.9"
services:
  uptime_kuma:
    image: louislam/uptime-kuma
    volumes:
       - /uptime_kuma/data:/app/data
       - /uptime_kuma/certs:/certs
    deploy:
      restart_policy:
        condition: any
    ports:
      - 3001:3001
    environment:
      - NODE_EXTRA_CA_CERTS=/certs/ca-bundle.crt # inject your CA.
      #-NODE_TLS_REJECT_UNAUTHORIZED=0 # ignore ssl issues, potentially dangerous but useful for testing :)

This is looking like a great start to a project in a space that I think is sorely lacking in up to date tools. I am currently using statping but the fact that it hasn't been updated in months makes me think it's abondanware. Once some of the enhancements listed on this page are implemented I will look at deploying Uptime Kuma to production. 😃

Added your enhancements to the list @joe-eklund

Here are some ideas I thought of:

Ability to set default notifications in settings so you don't have to select each time you create a new monitor
"Check now" button to perform a check a single monitor right away
Tags to group monitors with filtering (by tag, by type)
Sorting monitors in dashboard
More information about monitor (date created, last modified etc.)
Ability to SMTP multiple email addresses or CC/BCC

@parityhero
Added your enhancements to the list. Removed 1 duplicate:
4. Sorting monitors in dashboard -->
Re-order monitors: create your own list priority

Dark mode (based on system setting would be great)

I would also suggest to have a swhitch button between light/dark mode

@magicgg91
Added yours to the list as well. Removed the duplicates.

I have another potential improvement:
The ability to configure how long the monitor history is retained.
A global setting to automatically delete monitor entries older than ${x} days would declutter the user interface.
This would also go in tandem with the "delete all logs for a specific monitor".
It's more control handed over to the user and should only need a toggle in the global app settings and a database query to prune old entries according to the timestamp.

Would love the ability for a "Bulk Upload" via csv etc....

@Spiritreader @EclipseOfficeTech
Added your enhancements to the list!

Check certficate validity and expiration time (thx @magicgg91)

awesome this is implemented now in 1.0.7.
I have not yet figured out though: will it cause a notification when the TLS cert validity is about to expire?
Some servers i'm taking care of do not have the most reliably cert renew facilities yet and i'd love to be warned a few days ahead :D

@aslmx Notification for TLS expiry is not implemented yet. (see #116) It's a bit more difficult since we might need to add a config section for when and how often to send notifications.

Could I get authentication around the /metrics page added - at the minute someone reverse forwarding the project will/could be inadvertently disclosing internal network configuration (i.e. if checking internal IP addresses), accurate internal DNS names etc....
I suspect this might be non-trivial however.

A simple one (hopefully).
Can a setting be added in Email Notification to set the name of the "User" sending the notification.
Currently it says Uptime Kuma<EMAIL_ADDRESS>

Can a setting be added in Email Notification to set the name of the "User" sending the notification.
Currently it says Uptime Kuma<EMAIL_ADDRESS>
I'd also like that one.
I run two instances of Uptime Kuma, one in my LAN, one on a VPS. I solve the challenge to differentiate alarms, because they send to different eMail addresses. Like<EMAIL_ADDRESS>for Alerts from LAN and<EMAIL_ADDRESS>for alarms from my VPS. But would be nicer if the FROM could be customized!

could we please add the option to check http(s) pages behind http basic authentication?

could we please add the option to check http(s) pages behind http basic authentication? This is how this looks in uptimerobot:

You should be able to do it inline (haven't tested it tho<EMAIL_ADDRESS>

could we please add the option to check http(s) pages behind http basic authentication? This is how this looks in uptimerobot:

You should be able to do it inline (haven't tested it tho<EMAIL_ADDRESS>
Thanks, that worked perfectly!

The current "status" isn't really helpful. Take this example: there was an 401 error which I solved by adding http basic auth to this monitor. Since then tis UP - this status would only be useful if it would show how long it persisted for i.e. status 401 for 7 minutes or some such?

Consider slimming down docker image. Dockerfile optimization may help with multi stage builds, ordering and reducing/combining steps. the current version may be used for test builds for easier debugging.

Consider slimming down docker image. Dockerfile optimization may help with multi stage builds, ordering and reducing/combining steps. the current version may be used for test builds for easier debugging.

There was a PR for doing that, the problem is related to mapbox/node-sqlite, the team managing that dependency is blocking the downloads of the release binaries.

I'd like to see the ability to get a notification on high response time. For example, anything above 250 ms for one monitor, or perhaps 100 ms for some other monitor, sends a notification.

 h

Could we get markdown support in the incidents posts?

Would be great to add prometheus auto discovery. Useful for kubernetes clusters that export to prometheus.

The ability to notify if an SSL is close to expiring?

That is already a feature afaik?

Hey there! How can I enable public dashboard?

Would status pages with authentication be possible?
The status page feature is really nice, but I have some services that I don't want to public just to be able to see that they exist. Maybe make it possible for status pages to require authentication would be nice.
Otherwise awesome tool!

Would status pages with authentication be possible? The status page feature is really nice, but I have some services that I don't want to public just to be able to see that they exist. Maybe make it possible for status pages to require authentication would be nice. Otherwise awesome tool!

As a side note, you should be able to do this with Authelia as it stands. (Can use it with Nginx Proxy Manager.)
https://youtu.be/kw_pohbKE3Y

As a side note, you should be able to do this with Authelia as it stands. (Can use it with Nginx Proxy Manager.)

I already have oauth2-proxy + Keycloak running for other services and also though if I just use some nginx magic to protect everything but some specific status pages, but it would be way easier if Update-Kuma could do that by itself.

As a side note, you should be able to do this with Authelia as it stands. (Can use it with Nginx Proxy Manager.)

I already have oauth2-proxy + Keycloak running for other services and also though if I just use some nginx magic to protect everything but some specific status pages, but it would be way easier if Update-Kuma could do that by itself.

Sounds like you could protect the UptimeKuma upstream status page via /status/ or /status/mydashboard using your oauth2-proxy using keycloak as the auth provider?

I could do that yes and I probably will, but I still think this could be a good feature of uptime-kuma itself.

Don't think I saw this mentioned, but some kind of monitor "profiles" would be nice. With this I could create profile(s) that have select notification settings, Heartbeat intervals, retry intervals, etc. I tend to treat less important endpoints with less severity by checking less frequently or retry intervals far more spaced. Being able to quickly add a monitor and select that profile so its consistent and easier to bulk update. Maybe associate with a tag.

Can we have separate issues for the checklist items, so that I track the status of one of them?

There are separate issues for each of this points... however, this is a post from the very beginning, less than 5,000 pulls at that time I guess 😆 So only people were thanked and linked but not the issue itself.
I think it could be beneficial amending this one by adding the issue links or making an new post with a checklist linking to the issues.

Do you know if Pagination was added?
I have over 1000 endpoints and it runs super slow after adding so many.

I think pagination was added for the stats only - for the monitors itself there is just a scrollbar...

What about keyword-based monitor?
Keyword-based monitors look for a specified keyword or phrase in the page response.

What about keyword-based monitor? Keyword-based monitors look for a specified keyword or phrase in the page response.

We already have this:

I think pagination was added for the stats only - for the monitors itself there is just a scrollbar...

@rezzorix May you point me in the right direction? I can not find it, nor have I been able to find a resolution.
To anyone who tries to monitor over a thousand endpoints how does it perform for you?
Thank you in advance!

Can we create dashboards/status pages or monitor using code/yaml or even cli ?

I think pagination was added for the stats only - for the monitors itself there is just a scrollbar...

@rezzorix May you point me in the right direction? I can not find it, nor have I been able to find a resolution.
To anyone who tries to monitor over a thousand endpoints how does it perform for you?
Thank you in advance!

Currently pagination is only for the stats pages.
I am sure there might be some improvements for ease of use (pagination, sorting etc) somewhere in the future.
Since you are at enterprise scale... maybe either a paid solution would be good...
If paid solution is not on the table then contributing to the code would be the way.
If the code is good and benefits the project, I am sure it will be merged into a future version.

I've got some ideas/wishes I couldn't find in other issues/this massive thread:

[ ] Dashboard groups based on tags: add tag(s) to a group to put any or all matching monitors into the group.
[ ] Docker label support: use docker as a source for monitors though docker labels

To expand on monitor ordering, perhaps introduce grouping? Users could sort by group or a main/pair of tags? Additionally, add severity levels for importance and what should be at the top (for both monitors and groups accordingly).
For instance, perhaps have networking components at the top (after all, if they're having issues, a lot of other items could be after that). Then perhaps servers, and finally dwindle down further as each person sees fit. Mostly spitballing here but you get this gist of it.

Hey everyone 😊, not sure if this has been mentioned at some point, had a brief scan of the discussion, but I think it would be great if we had an ability to add multiple incidents (incidents history), on individual status pages.
Currently you can only show one and then override it.
Perhaps similar to what IONOS has here: IONOS Service Status

Great Idea! Something to improve on the list: For the select you can add a bit more options like delete also putting a check box to select before the monitor name will also be great to not select all.

@Panja0
Here are a few links to other PRs/issues:

Select all monitors at once to pause them: at the moment you have to pause them all manually one by one

Will be resolved by https://github.com/louislam/uptime-kuma/pull/1886 in the 1.23 release

Monitor groups: e.g. Server1, Server2

Resolved since the 1.22 release includes monitor-groups

Re-order monitors: create your own list priority

Will be resolved by https://github.com/louislam/uptime-kuma/pull/3312 in the 1.23 release

Combined monitors : A monitor that looks at two instances but is displayed as one and/or has a dropdown

Resolved since the 1.22 release includes monitor-groups

Incident reports: ties into public status page, the ability to write a message relating to the status of a monitor, with a status on each message such as "no_entry Investigating", "warning Resolving" and "heavy_check_mark Resolved".

Please link https://github.com/louislam/uptime-kuma/pull/1253

Ability to use a separate docker container as the database

Will be resolved by https://github.com/louislam/uptime-kuma/pull/2720 in the 2.0 release

Ability to authenticate with digest or basic auth

Basic auth is a thing => Please remove this from the comment

User management with LDAP and oAuth. This would allow us to use our built in user management tools instead of having to create yet another user for people that need access

Add links to https://github.com/louislam/uptime-kuma/issues/128 as the trackig issue and https://github.com/louislam/uptime-kuma/issues/3328, https://github.com/louislam/uptime-kuma/issues/553, https://github.com/louislam/uptime-kuma/issues/1575 as duplicates)

More information about monitor: date created, last modified etc

Please add a link to https://github.com/louislam/uptime-kuma/issues/3481

Personnalize notifications for texts / icons to be used, depending on private/public channels for example

Please add a link to https://github.com/louislam/uptime-kuma/issues/975 as the tracking issue

Ability to configure how long the monitor history is retained. A global setting to automatically delete monitor entries older than ${x} days would declutter the user interface.

Resolved as setting retention is configurable

A more general question:
Could you please close this issue and create distinct issues for the things for which no issue already exists?
Duplicates only create immortal zombies and are really hard to issue-manage.
This can be seen on how many closed issues I have found in your list 😓


Adding permissions for Sony platforms

Fixes https://github.com/OneDrive/onedrive-sdk-android/issues/60

It works although I would have expected that the code be changed in a way that the permission isn't needed any more. This is just a workaround.
Anyway since it's not a permission visible to the end-user, that's probably ok.
Thanks for the quick fix.


Line Following

User Story
as a user I want the car to be able to follow a line so that I can measure a room for example.
Acceptance Criteria
Car should follow a line of tape for example, following it if it goes left and right

closing the issue


Animated messages?!

You can add animated messages.
For example for guis or items.

Although this idea kind of does not fit the plugin, since this is message editing plugin and not 'message creation' one (with animated messages I would have to create, send and track new packets aside from editing the original one), I will about it.


Next 14 + App router

Hey @soranoo, does this work with Next 14 + App router? Thanks
Update: Seems to be working!
How can I configure the white and blacklist to only obfuscate the folders/files in the green section? And exclude anything in the red section?
 blackListedPaths: ['./next/cache', './src/app/**/*.{js,ts,jsx,tsx}'],
 whiteListedPaths: ['./src/content/components/**/*.{js,ts,jsx,tsx}'],
 excludeAnyMatchRegex: [/\.next\/server\/pages\/api/],

You can't whitelist or blacklist the source code folders/files. The whitelist and blacklist are for the files/folders inside the .next folder.
 What do you do in then?

The out & css-obfuscator folder can be deleted.

Alright, the obfuscation is working.
original file
export default function KpiCard1() {
  return (
    <Card className="mx-auto max-w-sm">
      <Text>Issues solved</Text>
      <Flex justifyContent="start" className="space-x-1" alignItems="baseline">
        <Metric className="text-gray-900">338</Metric>
        <Text>/ 450</Text>
      </Flex>
      <ProgressBar value={75} className="mt-6" />
    </Card>
  );
}

out ✅
export default function KpiCard1() {
  return (
+    <Card className="pdy3r huyg1">
      <Text>Issues solved</Text>
      <Flex justifyContent="start" className="space-x-1" alignItems="baseline">
+      <Metric className="el4s8">338</Metric>
        <Text>/ 450</Text>
      </Flex>
+   <ProgressBar value={75} className="xoqq0" />
    </Card>
  );
}

Here are my steps:

Run next build && npm run obfuscate-build
Delete folders: css-obfuscator and out
Delete next/cache
Run next start

But if i check out the website on localhost, the classes are not obfuscated. Which is actually expected, becauseI have not made any changes to the original files, they are still using the normal classes like mx-auto.

Yes, I see there are some classes still in their original form but that should be fixed on the PostCSS-Obfuscator side.  At least I made it work in Nextjs even though it is not fully functional.

Ah, it's completely fine with the classes that are not replaced, it's not that relevant to me. But how did you exactly go about in your next js demo project you posted?
I cloned this repo and tried to follow the steps for the demo but I was not able to get the demo project working :(
Could you outline what steps you follow to make the demo project work?

I ran npm run build & npm run start twice to get it to work. I don't know the exact reason but it works 💯

Hey @soranoo, I was not able to get it running, also a colleague did not figure it out.
We have opened a $225 bounty to someone who fixes that problem in our repo. Would you be interested in helping us out?

certainly. why don't give it a try
Is it a public repo?

@soranoo great! It's a private repo. I will set everything up and invite you to the repo. May I have your Email/Slack/Discord? Easier to communicate over there :)

For sure, you may contact me at<EMAIL_ADDRESS>Since I've been quite busy in recent weeks(I hope I can finish most work in the next week), I'm going to start next weekend.
I will del this msg after 24 hrs.

Copied it, you can delete the message. Will send you an email later today!


Value match fails for negative integer values

Description:
Value match fails with negative integers.
Steps to reproduce:
import ballerina/io;
import ballerina/lang.'string as strings;

public function main() {
    int x = strings:codePointCompare("hello", "ballerina");
    match x {
        -1 => {
            io:println("foo");
        }
        _ => {
            io:println("bar");
        }
    }
}

This will endup with following error message:
ERROR [hello.bal:(7:9,7:11)] unsupported match pattern
Affected Versions:
Swan Lake Alpha2

The spec allows this as a const-pattern.
The workaround is to define a constant and use that.
import ballerina/io;
import ballerina/lang.'string as strings;

const NEGATIVE_ONE = -1;

public function main() {
    int x = strings:codePointCompare("hello", "ballerina");
    match x {
        NEGATIVE_ONE => {
            io:println("foo");
        }
        _ => {
            io:println("bar");
        }
    }
}

Works on slalpha3, we can add tests and close this issue.

Tests added in https://github.com/ballerina-platform/ballerina-lang/pull/30143/commits/cff04c96fa0c3bcde9c9ba5082d990d7abd432e0.


dp-input slot is not change modelValue of date-picker

Describe the bug
Hello, when we use custom input using slot (#dp-input), datepicker's modelValue is not updated. Whether the input used is native or custom input, it does not work very well.
I looked through the documentation a lot, but I couldn't find anything regarding this situation. If this is really a bug, I am sharing screenshots below.
Also, I'm not sure, but this problem seems to be present in the example in the documentation. Dp-Input
To Reproduce
Steps to reproduce the behavior:

Create a datepicker component. Like:

<VDatePicker
  v-model="model"
  v-bind="$attrs"
  auto-apply
  :min-date="minDate"
  :max-date="maxDate"
  :inline="isPartial"
  :range="isRange"
  :text-input="textInput"
  calendar-cell-class-name="date-picker-cell"
  calendar-class-name="date-picker-calendar"
  :enable-time-picker="withTime"
>
  <template v-if="textInput" #dp-input="{ value, onInput }">
    <input
      :value="value"
      :placeholder="$attrs.placeholder"
      class="mt-1"
      @input="onInput"
    />
  </template>
</VDatePicker>

When I use this component and give textInput=true and format='yyyy-MM-dd', it creates a custom input.
Select a date from the dialog that opens when we click on Input.
Click on Input again and just make a small change to the date with the keyboard.
Just click on an area outside of input.
See the error. (The date you selected from the dialogue appeared again.)

Expected behavior
When we make a change to the custom input, the modelValue in the datepicker should be updated.
Screenshots
Screencast from 17-05-2024 13:52:19.webm
Desktop

Browser: Chrome
Library version: 8.6.0

The issue here is that the onFocus method is not exposed when a new version is published, you would need to connect both the onFocus and onBlur input events to be able to parse the date with auto-apply.
I should probably make docs a bit clearer :)

The issue here is that the onFocus method is not exposed when a new version is published, you would need to connect both the onFocus and onBlur input events to be able to parse the date with auto-apply.
I should probably make docs a bit clearer :)

Thank you for your interest, I will try it when the new version is released. :)

The issue here is that the onFocus method is not exposed when a new version is published, you would need to connect both the onFocus and onBlur input events to be able to parse the date with auto-apply.
I should probably make docs a bit clearer :)

By "connecting" you mean just using #dp-input="{ value, onInput, onBlur, onFocus }" and then simply
@input="onInput"
@focus="onFocus"
@blur="onBlur"

Damn, that would be great to have 👍

@Bowske Yes, that is correct


Add flags to run particular component diagnostics

Allow users to specify which diagnostics they want to run.

We might have accidentally duplicated this issue...covered by https://github.com/NCAR/CUPiD/issues/72 and https://github.com/NCAR/CUPiD/issues/63, which are being addressed by https://github.com/NCAR/CUPiD/pull/88

Good catch, thanks @rmshkv !


Sometimes the shape that you draw doesn't close automatically

When the user is in a mobile device, and want to draw a shape in the map, sometimes the shape doesn't close automatically and the usar has to touch the map again to close the shape

Hi @julietaona, can you please provide a list of steps to replicate the issue? Or even better a video showing it happening? I'm assuming the user is drawing the shape by moving his finger around the screen, it can also be a device issue, I've never encountered such behavior before.

https://user-images.githubusercontent.com/38087583/205307593-b8eb4091-37a0-487e-a812-26778ca9fbd5.mp4
I going to share you a video

Do you have any update about this issue?

Hi @julietaona, my theory is that the shape sometimes isn't closing automatically because the noise on the map (House price markers), I would suggest to hide all the markers from the map when entering the draw mode, that way the map is clean and it is also easier for the user to draw the shape around the area he wants without the markers polluting the map.


Automatic update of timestamp field on every change of data.

OrientDB Version: OrientDB Server v3.0.8
Java Version: 1.8.0_181
OS: MacOS 10.14
I have VERTEX class and I would like to automatically update field with timestamp (DATETIME) on every that record data change.
Thank you guys.

Hi @petervavro
You can do it with a hook, see
https://orientdb.com/docs/3.0.x/internals/Dynamic-Hooks.html
https://orientdb.com/docs/3.0.x/java/Java-Hooks.html
Thanks
Luigi

Thank you,.. But can I use Dynamic Hooks in Vertex class ?

Sure, there is no limitation in terms of document types

But in my case, I am already extending the vertex class :
e.g. : CREATE CLASS MyVertexClass EXTENDS V
So, if I understand right to be able to use Dynamic Hooks I need to extend the class following way : CREATE CLASS MyVertexClass EXTENDS OTriggered
And that is changing the type of class to "Generic Class" and  it is not Vertex anymore right ? Is this proper ? Or how to do this please ?
Thank you

@luigidellaquila , I really appreciate your help and patience.
Thanks to your help, I was able to come up with solution, so here it is :
CREATE FUNCTION updateDT "doc.field('fieldNameDT', new Date().getTime());" LANGUAGE Javascript

CREATE CLASS MyClass IF NOT EXISTS EXTENDS OTriggered;
ALTER CLASS MyClass CUSTOM onAfterUpdate='updateDT';

But in my case I had to extend EDGE class so instead CREATE CLASS MyClass IF NOT EXISTS EXTENDS OTriggered; use :
CREATE CLASS MyClass IF NOT EXISTS EXTENDS E;
ALTER CLASS MyClass SUPERCLASS +OTriggered;

Thanks


[SPARK-4485][SQL] (1) Add broadcast hash outer join, (2) Fix SparkPlanTest

This pull request
(1) extracts common functions used by hash outer joins and put it in interface HashOuterJoin
(2) adds ShuffledHashOuterJoin and BroadcastHashOuterJoin
(3) adds test cases for shuffled and broadcast hash outer join
(3) makes SparkPlanTest to support binary or more complex operators, and fixes bugs in plan composition in SparkPlanTest

Merged build triggered.

Merged build started.

Test build #36283 has started for   PR 7162 at commit b5a4efa.

Merged build finished. Test FAILed.

I assume there is a Jira ticket for this, can you add it to the title?

Merged build triggered.

Merged build started.

Test build #36285 has started for   PR 7162 at commit dc5127e.

Merged build finished. Test PASSed.

cc @marmbrus

Merged build triggered.

Merged build started.

Test build #36360 has started for   PR 7162 at commit 14e4bf8.

Merged build finished. Test PASSed.

Merged build triggered.

Merged build started.

Test build #36517 has started for   PR 7162 at commit 3742359.

Merged build finished. Test PASSed.

Here are some performance results:

Pretty significant speedups when one of the tables is much larger.

I'm going to go ahead and merge this to unblock other work on the plan tests.  We can take care of threadpool consolidation in a followup.  Thanks!