new validation seems quite slow

now we've validation builds seem quite slow. e.g. if you clone and build this repo it used to be pretty fast: https://github.com/fabric8io/fabric8-platform
Now its about 9 minutes on my laptop - just doing YAML generation/validation mostly. After 1 build there should be no downloading from the internet or anything; so should be pretty snappy.
I wonder if the validation stuff could be tuned a bit? e.g. is it loading the schema from scratch as it validates every YAML file in every repo?

@jstrachan that's long, how long it used to take before validation?
For the being you can skip the validation with mvn -Dfabric8.skipResourceValidation=false
Yes, work is going on for optimizing schema loading https://github.com/fabric8io/fabric8-maven-plugin/issues/1034

using that CLI still seems to validate....
$ mvn -Dfabric8.skipResourceValidation=false fabric8:resource
...
INFO] Building Auth Service 4.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- fabric8-maven-plugin:3.5.30:resource (default-cli) @ auth ---
[INFO] F8: Running in Kubernetes mode
[INFO] F8: using resource templates from /workspace/java/fabric8-platform/apps/auth/src/main/fabric8
[INFO] F8: fmp-revision-history: Adding revision history limit to 2
[INFO] F8: validating /workspace/java/fabric8-platform/apps/auth/target/classes/META-INF/fabric8/openshift/auth-configmap.yml resource
[INFO] F8: validating /workspace/java/fabric8-platform/apps/auth/target/classes/META-INF/fabric8/openshift/auth-deploymentconfig.yml resource

@jstrachan oh thats my bad, its should be true
mvn -Dfabric8.skipResourceValidation=true

ok no validation:
$ mvn -Dfabric8.skipResourceValidation=true fabric8:resource
...
[INFO] Total time: 42.987 s

validation:
$ mvn fabric8:resource
...
[INFO] Total time: 06:58 min

so > 6 mins just validating

wohh that's too much!!
Need to fix it on high priority.

I expected validation (until fixed by #1034) would download ~300k per resource from github, so ~2MB and few seconds of delay in the average case. @jstrachan what project are you trying to build?

am using this project: https://github.com/fabric8io/fabric8-platform which adds > 6 minutes of just validation to the build. I guess part of my issue is I don't have crazy fast wifi ;)
I wonder could we at least cache the ~300k resources in the local maven repo; it seems like its downloading ~300k to validate every YAML file - of which there are many of them in the fabric8-platform project

Yeah, in fact that is a collector of resources. The problem with current implementation is that no cache is being used at all. We were looking for a prepackaged jar with all resources to solve this problem, but also caching resources using tmp files or also the maven repo (to have them available across executions) is a good solution.
@hrishin are you looking into it?

@nicolaferraro yes I'm looking into it and maven package is ready but it has some issues but would like to discuss it in #1034. Yes as suggested simple in memory caching of files sounds good idea as well, any pointers on how we can cache files in maven workflow?

Following are observations for maven plugin (it has bunch of integration tests)
Validation:

with maven packaged JSON schema:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:07 min
[INFO] Finished at: 2017-09-15T15:40:08+05:30
[INFO] Final Memory: 92M/1980M
[INFO] ------------------------------------------------------------------------

GitHub hosted JSON schema:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:37 min
[INFO] Finished at: 2017-09-15T15:35:55+05:30
[INFO] Final Memory: 102M/1974M
[INFO] ------------------------------------------------------------------------

Without Validation:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:12 min
[INFO] Finished at: 2017-09-15T15:58:02+05:30
[INFO] Final Memory: 102M/1950M
[INFO] ------------------------------------------------------------------------

@jstrachan Observations for https://github.com/fabric8io/fabric8-platform
With Validation:

Maven packaged JSON schema:

mvn clean fabric8:resource

[INFO] Total time: 43.498 s

Github hosted JSON schema:

mvn clean fabric8:resource
[INFO] Total time: 03:20 min
(Had a snacks mean while)

Without Validation:
mvn -Dfabric8.skipResourceValidation=true fabric8:resource

[INFO] Total time: 32.187 s

looks like the maven packaged schema is great ;)

Looks much better!
Is the validation itself adding that delay? It's small considering the amount of resources present in that repo, but can you identify other sources of delay?

@nicolaferraro yes its validation only. I'm looking into other things as well. We can optimize the process of validation

Convert sequential flow to concurrent flow: Right now all resources are processed in sequential, we can try to convert it into concurrent flow
Caching of schema file

From 3:20m to 43s. Woah!
@nicolaferraro @jstrachan Just had a discussion with @hrishin. We should figure out a way to package different versions as required. I am not sure how it can be pushed to Maven central after that but we should definitely have the option to package a version of your choice (maybe we can pass it as a parameter to the CLI or something).
Current results shown above are based on master-standalone version. I would like to see what happens if we use 3.6-standalone which is what we should probably use for fabric8-*. What do you folks think?

we can parameterise how the validation works if we need to. We should be able to release different versions of the schemas / artifacts like any other resource in maven central right?

Parameterise how the validation works if we need to

Yes we can. We can include all schemas in the single jar or for each version we can have different jar.
Single version of K8/OS contributes to 11MB jar, so if we include X versions in single jar then size would be that order of magnitude of versions we include.
@pradeepto has suggested, how about including latest stable 2 or 3 versions schema in the jar? In that case jar size would go approximately 33-35 MB
Assumption: Default validation schema would be latest stable release of K8/OS.
@nicolaferraro @jstrachan any suggestions?

using the latest version would probably do the trick; as the schema is usually fully backwards compatible. I guess folks could parameterise the version of the schema to validate against? Then there's just 1 version of the schema in 1 jar and fmp defaults to the latest one?

Parameterise the version of the schema to validate against?

We have to add support for the version parameters. At present state its not implemented yet.  If needed we can implement one.
does that answers your question @jstrachan ?

fmp defaults to the latest one?

Yes, its latest one.

probably sticking with the same schema version as is used for the kubernetes-model / kubernetes-client will do for now? (i.e. the latest)

Agree we should target the latest version only, so 1 single jar with latest schema should be ok, as it's backward compatible.
I've included some Maven bits in the spring-boot live reload part of the plugin to dynamically retrieve a specific jar from Maven on the fly (in that case, it was the project-specific version of the spring-boot devtools library). But in this case I'd prefer to bundle the latest schema version directly in the plugin.

using the latest version would probably do the trick; as the schema is usually fully backwards compatible.

Sounds valid, it may be good to stick with latest version.
Assuming this premise holds true, we have java packages in place.
The question is how to host maven modules to central repository?
@nicolaferraro @jamesnetherton @pradeepto @rhuss

we just release those maven jars to maven central & depend on them in the fabric8-maven-plugin?

@nicolaferraro looks wise suggestion, thanks :)
In that way it will be less dependency and easy to package the schema files.
Are we not defeating the origin purpose of externalizing schema files from plugin?

I think we should just put the schema jars in maven-central (for now let's just have 1 schema per jar and let's use the "latest" released version i.e. 3.6). This keeps the size of fmp to its current size and also fmp can download schema jar when it needs it and also do so when schema jar gets updated.
My only suggestion would be let's stick some version that we can fall back on like 3.6 as opposed to master (that is what I understood when latest was mentioned in the above comments. I agree that that API will be backward compatible but I am not sure if that will always be the case in future when it comes to master.
Also, @hrishin can you please link your changes/fork here?

Kubernetes Schema:
https://github.com/hrishin/kuberenetes-json-schema/tree/java-package
OpenShift Schema:
https://github.com/hrishin/openshift-json-schema/tree/java-package

the kubernetes-model project, that generates the DTOs for the kubernetes + openshift schema - also generates and releases a json schema.
e.g.

http://central.maven.org/maven2/io/fabric8/kubernetes-model/1.0.79/kubernetes-model-1.0.79-schema.json

I wonder if we can reuse that - then the kubernetes-model + json schema stay in sync?

BTW you should be able to look for schema/kube-schema.json on the CLASSPATH as this schema is included inside the kubernetes-model jar

schema/kube-schema.json(model-schema) looks good and could be single source of truth for resources (model) definition across all the projects (kubernetes-model, kubernetes-client, this project)
To accommodate model schema in current scope we need to address following issues first.

JSON structure:
Current structure of JSON schema not suitable to use for validation and querying resources is difficult. We need some changes like this

{
  id:
  $schema:
  definitions:
  .....
  resources: {
    kubernetes: {}
    openshift: {}
  }
}

Here we need a property like resources that contains all resources of Kubernetes, OpenShift. If validator wants to validate deployment or deploymentconfig then it can pick it's properties for respective resource.

Definition gaps:
As per observation we found some gaps between the original resources definitions and model resources definitions. e.g. IntOrString definition, which looks incorrect. Hence it's not giving correct results.


Enable no implicit coercion eslint rule and pre-apply fixes

From the rule documentation:

In JavaScript, there are a lot of different ways to convert value types. Some of them might be hard to read and understand.

Converted this to a draft since I am going to work on strict-boolean-expressions first.


Replace payloadId with PayloadAttributesV1

In https://github.com/flashbots/mev-boost/pull/20#discussion_r774768060 @thegostep suggests:
Should this just be the full PayloadAttributesV1 to avoid confusion?
this was supported by @terencechain and @realbigsean with :+1: , so lets just do it.

Closing because the API's have moved on and this is no longer applicable.


Suggestion: AllArgsConstructor, RequiredArgsConstructor and NoArgsConstructor?

Hi
Thank you for this plugin. Project lombok (for java) has:

AllArgsConstructor : Generates a constructor with all members
RequiredArgsConstructor: Generates a constructor for all final/readonly members
NoArgsConstructor: Generates empty constructor

Any plans for implementing something like this? Currently I'm having some classes, that just needs a constructor that takes all arguments, but I cannot make them readonly as they need to be updated through their properties

I implemented the IgnorePrimaryConstructor attribute and adding support to read-only properties at the pull request https://github.com/chaowlert/PrimaryConstructor/pull/4.

@chaowlert, can you publish a new version on NuGet?

@fabionaspolini thx u for PR, I also add [IncludePrimaryConstructor] for including fields not annotated with readonly.


API Gateway feature

Added api gateway to server.
Please check mostly pkg/apigw, as the system CRUD is fairly common.

Codecov Report

Merging #232 (3796233) into 2021.9.x (cdd1aa4) will increase coverage by 0.30%.
The diff coverage is 42.16%.

@@             Coverage Diff              @@
##           2021.9.x     #232      +/-   ##
============================================
+ Coverage     41.00%   41.31%   +0.30%
============================================
  Files           625      687      +62
  Lines         54500    60569    +6069
============================================
+ Hits          22348    25024    +2676
- Misses        28987    32079    +3092
- Partials       3165     3466     +301

Impacted Files
Coverage Δ

automation/automation/expr_types.gen.go
5.88% <0.00%> (-1.81%)
:arrow_down:

automation/automation/http_request_handler.go
31.81% <ø> (ø)

automation/service/registry.go
51.51% <ø> (ø)

automation/service/session_actions.gen.go
23.22% <0.00%> (ø)

automation/service/trigger_actions.gen.go
63.82% <0.00%> (ø)

automation/service/workflow.go
52.66% <0.00%> (+13.49%)
:arrow_up:

automation/service/workflow_actions.gen.go
54.45% <0.00%> (+7.67%)
:arrow_up:

automation/types/expr.go
48.75% <0.00%> (+6.25%)
:arrow_up:

automation/types/workflow.go
58.33% <ø> (+1.57%)
:arrow_up:

compose/rest/chart.go
77.04% <ø> (ø)

... and 339 more

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 e95a991...3796233. Read the comment docs.


[MB-9062] add contract code to FSC for the purposes of displaying on the EDI

Description
This fixes the issue where generating an EDI for a payment request that has only 1 service item that is an FSC it won't error out due to a missing a missing ContractCode.
Reviewer Notes
Is there anything you would like reviewers to give additional scrutiny?
Setup
Add any steps or code to run in this section to help others prepare to run your code:
echo "Code goes here"

Code Review Verification Steps

[ ] If the change is risky, it has been tested in experimental before merging.
[ ] Code follows the guidelines for Logging
[ ] The requirements listed in Querying the Database Safely have been satisfied.
Any new migrations/schema changes:

[ ] Follow our guidelines for zero-downtime deploys (see Zero-Downtime Deploys)
[ ] Have been communicated to #g-database
[ ] Secure migrations have been tested following the instructions in our docs

[ ] There are no aXe warnings for UI.
[ ] This works in Supported Browsers and their phone views (Chrome, Firefox, IE, Edge).
[ ] Tested in the Experimental environment (for changes to containers, app startup, or connection to data stores)
[ ] User facing changes have been reviewed by design.
[ ] Request review from a member of a different team.
[ ] Have the Jira acceptance criteria been met for this change?

References

Jira story for this change
this article explains more about the approach used.

Screenshots
If this PR makes visible UI changes, an image of the finished UI can help reviewers and casual
observers understand the context of the changes. A before image is optional and
can be included at the submitter's discretion.
Consider using an animated image to show an entire workflow instead of using multiple images. You may want to use GIPHY CAPTURE for this! 📸
Please frame screenshots to show enough useful context but also highlight the affected regions.

Messages

:book:
:link: MB-9062

  Generated by :no_entry_sign: dangerJS against 4b02ebd55cbee2a79ce6cb5b351f904457c26595


🏗 [ADMIN] - Stormheg

DSF member

[X] I am a DSF member

Why do you want to join?
Introduction
Hello, my name is Storm Heg from the Netherlands. I'm a Wagtail/Django developer and a member of the Wagtail Core team since 2021. I'm more involved with Wagtail than I am with Django and not active at all on social media, so most of you in the Django ecosystem probably won't recognise my name. Most of my contributions involve Wagtail and its ecosystem of packages as a member of Wagtail Nest.
I'm also a maintainer of django-recaptcha because I regularly use this package in my projects and thus have an interest in keeping it healthy.
Why do I want to join
I want to see Django Commons succeed in becoming a trusted home for packages.
Like many other software developers, I rely a lot on software written and maintained by others. I've seen software I relied on being abandoned by its maintainer, to great frustration of the users who relied on it. I appreciate there are all sorts of reasons why a maintainer might no longer have an interest in maintaining (and that's okay!). When asked to transfer maintainership, there are often rightful reservations about transferring maintainership to unknown individual(s). It's an issue of trust.
I strongly believe community maintained packages, with oversight from a trusted group of individuals, is a good response to this issue. Thank you @tim-schilling for breathing new life into this concept.
I would like to be one of the trusted individuals for Django Commons.
Please tell us about your packaging experience?
Like mentioned before, I'm a member of Wagtail Nest and have a good amount of experience with setting up CI and PyPI release automation.
Here are some links:

maintainer of django-recaptcha: see the pull requests I've been involved with
maintainer of wagtail-ab-testing: see the pull requests I've been involved with

Please tell us about your GitHub Actions experience?
I've written plenty of Github Actions workflows over the years. Both for open source projects and as part of my day job.
Here are a couple of highlights:

Set up PyPI Trusted Publishing for django-recaptcha: https://github.com/django-recaptcha/django-recaptcha/commit/791f833542fa89b05a0a4c6c70a6242c89853f15
Migrate wagtail-ab-testing CI to Github Actions: https://github.com/wagtail-nest/wagtail-ab-testing/pull/58/files

How long do you expect to be involved with Django Commons?
Not for eternity that's for sure.
During this initial setup phase it is vital to attract enough trusted individuals. I see plenty of applications in this repository already, good!
I'm not sure how many trusted individuals are needed for Django Commons to function properly. I fear that having to many individuals will cause a situation where important tasks are deferred to other members ('someone else will get to it').
Perhaps some sort of roster of primary admins that will rotate? I'd be happy to spend maybe half a year actively as an admin and 1,5 years on 'standby' before doing another active term. Assuming I'm still working with Django and interested in the role at that point. What's that sound like?
Code of Conduct

[X] I agree to follow Django Commons's Code of Conduct

Hi Storm! Thanks for posting this (and for your community contributions), I'm looking forward to meeting you!
Please see https://github.com/orgs/django-commons/discussions/19. I'm not sure if the tag actually pinged you.

Thanks Tim, looking forward to meeting you too 👍

Welcome aboard as an admin Storm! Thank you!


App not recognizing QR code

Hey,
i tried the app, generated a QR code and all but when i try to scan it with the app it doesn't do anything. It focus on the QR code, then "freeze" for around 1 second and then start over, so focus again, freeze for 1 second and then again and again and again. Any ideas?
Thanks and take care
Florian

@wearekolossum could you share the problematic QR code here?
Thank you!

Hey @daniel-eder , sure thing. Find attached. It should be a quicktest result URL for the CWA in there. So maybe that's why it is not working? Can i only verify other results with the app?
Thanks in advance and take care
Florian

@wearekolossum content of your QR code doesn't follow necessary structure.
Content is the next: https://s.coronawarn.app?v=1#eyJ0aW1lc3RhbXAiOjE2Mjc5Mjc1MjcsInNhbHQiOiIzQkNGMEM4MDFGRkY2NkUwMjA5MjNEMjczNjNBNDVERSIsImhhc2giOiJmZjMzZjdkOWRlMDcwZWMzMWU5NGExNzgwMzRhNzg2YzU1N2Q0ZmJjOWYxNWI3MGYxNzNjN2Y5Mjk0ZTZiMWI4In0
Please get sure your QR code content structure follows the checks done here: https://github.com/eu-digital-green-certificates/dgca-verifier-app-android/blob/1f4e521ba13a8f1dc5d73cc58d83ec3ff1299282/app/src/main/java/dgca/verifier/app/android/verification/VerificationViewModel.kt#L147

Hey @oleksandrsarapulovgl ,
thanks for your response. I generated the code according to https://github.com/corona-warn-app/cwa-quicktest-onboarding/wiki/Anbindung-der-Partnersysteme-ohne-DCC which says that the content of the QR code should be such a link. That's why i asked: are those quicktest link QR codes not verifiable with the app?
And wouldn't it be a good idea to, when the content of the QR code is not correct, give the user any kind of feedback?
Thanks and take care
Florian

Hey @oleksandrsarapulovgl , thanks for the info. So i guess quicktest results are just not verifiable with the app.
Thanks anyways and take care
Florian


[WIP] implement key value store for sharing reusable variables

Copied from the tests. You can use this code as follows (in python scripts/shell.py):
def foo_initializer():
  return 1
def foo_reinitializer(foo):
  return foo

ray.reusables.foo = ray.Reusable(foo_initializer, foo_reinitializer)

@ray.remote([], [int])
def use_foo():
  return ray.reusables.foo

assert ray.reusables.foo == 1
assert ray.get(use_foo()) == 1
assert ray.get(use_foo()) == 1
assert ray.get(use_foo()) == 1

# Test that we can add a variable to the key-value store, mutate it, and reset it.

def bar_initializer():
  return [1, 2, 3]

ray.reusables.bar = ray.Reusable(bar_initializer)

@ray.remote([], [list])
def use_bar():
  ray.reusables.bar.append(4)
  return ray.reusables.bar

assert ray.get(use_bar()) == [1, 2, 3, 4]
assert ray.get(use_bar()) == [1, 2, 3, 4]
assert ray.get(use_bar()) == [1, 2, 3, 4]

# Test that we can use the reinitializer.

def baz_initializer():
  return np.zeros([4])
def baz_reinitializer(baz):
  for i in range(len(baz)):
    baz[i] = 0
  return baz

ray.reusables.baz = ray.Reusable(baz_initializer, baz_reinitializer)

@ray.remote([int], [np.ndarray])
def use_baz(i):
  baz = ray.reusables.baz
  baz[i] = 1
  return baz

assert np.alltrue(ray.get(use_baz(0)) == np.array([1, 0, 0, 0]))
assert np.alltrue(ray.get(use_baz(1)) == np.array([0, 1, 0, 0]))
assert np.alltrue(ray.get(use_baz(2)) == np.array([0, 0, 1, 0]))
assert np.alltrue(ray.get(use_baz(3)) == np.array([0, 0, 0, 1]))

@mehrdadn @pcmoritz I'd like to merge this soon, but will wait until everybody's happy.
So far there are two things that are unaddressed:

The duplicated code in RayReusables. It sounded like you guys had a better solution, but I don't remember what it was.
If we export a reusable variable and then a new worker registers, the new worker won't get the variable. This same change needs to be made for exporting functions, so I figured I'd do it in the next PR.

I'll try to take a look at this by tomorrow, please remind me if I forget.

Try using this as a template to improve the attribute checking & reduce code duplication?
class RayReusables(object):
	def __init__(self):
		self._field = 0
		self._slots = ()  # We must initialize it even though it will be rewritten
		# CHECKPOINT: Any attributes assigned before _here_ will be protected from rewrite or deletion
		self._slots = tuple(vars(self).keys())  # Make it a tuple so it cannot be modified
	def __setattr__(self, name, value):
		try: slots = self._slots
		except AttributeError: slots = ()
		if name in slots: raise AttributeError("Illegal assignment to '%s' object attribute '%s'" % (self.__class__.__name__, name))
		return object.__setattr__(self, name, value)
	def __delattr__(self, name):
		try: slots = self._slots
		except AttributeError: slots = ()
		if name in slots: raise AttributeError("Illegal deletion of '%s' object attribute '%s'" % (self.__class__.__name__, name))
		return object.__delattr__(self, name)


mobile: Fix the mobile_release CI workflow

The uses field can't be defined along with the steps field, see https://github.com/envoyproxy/envoy/actions/runs/5687706494/workflow. This commit moves the uses field to the env section, bringing the config in line with the other mobile-*.yml configs.

The uses field can't be defined along with the steps field

in this case the _env.yml workflow creates separate job/s (its a reusable workflow rather than an action)

/retest

/retest

Not sure why I keep getting test coverage failures on the CI job: https://dev.azure.com/cncf/envoy/_build/results?buildId=144518&view=logs&j=5035ce29-be3c-5fcf-dc50-abb6a265f8b1&t=fa1604b8-8cc1-5fec-21c7-5a4fad8d70ea&l=4954.  Will try merging in main to see if it helps.


Replace single-column table of constants with list

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

VBA/Excel-VBA/articles/cellformat-horizontalalignment-property-excel.md
:white_check_mark:Succeeded

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

VBA/Excel-VBA/articles/cellformat-horizontalalignment-property-excel.md
:white_check_mark:Succeeded

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


gopass-jsonapi: 1.15.14 -> 1.15.15

Description of changes
Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
24.11 Release Notes (or backporting 23.11 and 24.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/the-darwin-sdks-have-been-updated/55295/28

@NixOS/nixpkgs-vet could anyone explain the obscure nix formatting error here?

Can't reproduce the error anymore...


feat: multiple inline environments

This PR provides a solution to work with multiple inline environments. Bulk operations like tk export --recursive and
tk env list will now be able to work on multiple inline environments found in a main.jsonnet. The regular workflow
commands like tk apply, tk show, etc. will require the --name flag if multiple environments are present.
Ideally I'd like an interactive UI for selecting an environment, however there are multiple ways to do it with shell
integrations, for example fzf has been brought up in recent discussions. If we do want an integrated UI, I propose to
introduce that in a separate PR.
closes #432
be9dafc is a rebase of 91651e9 (kudos @sh0rez), which could also have its own PR, this PR just takes it one step further.
~commit c15952a comes from #475, need a rebase after it is merged, compare without that commit~

Thanks for the patience and review efforts.

Thanks for the patience and review efforts.


commonjs exports

It would be nice to be able to require FineUploader using my standard CommonJS importer instead of needing to bind it to the window object. I have a number of places where I'm trying to keep my global dependencies as low as possible.
Should be as simple as changing the header to
if (typeof exports !== 'undefined') {
    if (typeof module !== 'undefined' && module.exports) {
      exports = module.exports = qq;
    }
    exports.qq = qq;
  } else {
    qq || (qq = qq);
  }

(borrowed from underscore)
and then wrapping the script in a self-calling closure.

CommonJS support will be added in 5.8.0 (in progress). See #1562 for details.


Fall damage on touching yellow aercloud

Strange cloud physics
https://user-images.githubusercontent.com/18296791/103008515-3f0d8080-4503-11eb-90b2-0bc5751c50fd.mp4

Aerclouds atop or 1 block above the ground no longer shoot you downward, but the physics are still a bit wonky


libowfat: pull a(nother) patch from Gentoo

This fixes the build of opentracker:
https://hydra.nixos.org/build/196397424
which in turn allows to build all transmission.tests
Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
22.11 Release Notes (or backporting 22.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[x] Fits CONTRIBUTING.md.

/cc @makefu as the maintainer of opentracker.

This fix isn't needed on 22.05, apparently.

It would be nice to have the patch URL on a single line, to make copying it easier. (also wow what is this weird my_extern stuff!?) Anyway, LGTM otherwise.

I thought it was too long, but I suppose your point takes precedence.


Round of an integer should return an integer #505

Implemented:
even rounding for floats and ints, floats is partially handled by an update to the DLR submodule.
all of the various error messages I could find are identical to those in Python 3.
for types that implement round, round() delegates to this special member.
when number is an int it returns an int when it can. when it cannot a BigInteger is returned.
when number is a BigInteger a BigInteger is always returned.
The algorithm I have used for integral rounding is the one described here https://bugs.python.org/msg78141, which I believe is the algorithm that they use in CPython. There is a caveat that when ndigits is negative and cannot be converted to an int, then 0 is returned.  There is no concept of signed zero for BigInteger.
I've routed all of the two parameter integral rounding through a single BigInteger method to reduce the total number of code paths. Since there is a need to unify the int and long types and the int method can overflow I think the benefits of this outweigh any immediate performance concerns.
I think I've tested all of the code paths, but I wouldn't say that the numerical testing is bulletproof.

This is what I would include in the DLR instead of adding RoundToEven:
        public static double Round(double value, int precision, MidpointRounding mode) {
            if (double.IsInfinity(value) || double.IsNaN(value)) {
                return value;
            }

            if (precision >= 0) {
                if (precision > 308) {
                    return value;
                }

                double num = GetPowerOf10(precision);
                return Math.Round(value * num, mode) / num;
            }

            if (precision >= -308) {
                // Note: this code path could be merged with the precision >= 0 path,
                // (by extending the cache to negative powers of 10)
                // but the results seem to be more precise if we do it this way
                double num = GetPowerOf10(-precision);
                return Math.Round(value / num, mode) * num;
            }

            // Preserve the sign of the input, including +/-0.0
            return value < 0.0 || 1.0 / value < 0.0 ? -0.0 : 0.0;
        }

I'm fine with this as an initial implementation. A different approach to consider (if you're at all interested) would be adding __round__ methods to FloatOps, IntOps and LongOps and then delegating to those methods based on the type.

I'd like to take a look at moving the rounding logic into FloatOps, IntOps and LongOps, that sounds like the way to go and will let me see a bit more of the codebase, but it's getting late now, so I will do this tomorrow.

I'm just going through the code review now, as I was doing so I found a fun one:
>>> float(1.7976931348623157E+308).__round__()
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368

It seems that once the floating point value gets large enough (I'm not sure what the threshold is) the value gets converted to a BigInteger before rounding.
I guess that is because of situations like this in the IronPython implementation:
>>> float(1.797693134862315**7**E+300).__round__()
1.797693134862315**6**e+300

Maybe someone thought that looked wrong, so decided to bite the whale and convert to an int first.
What do you want to do about it? My vote would be to raise another issue and not pull it into this as it's already got quite big.

@hackf5 I believe there's an issue about floats being cast to ints somewhere. Will try to find it.

Ah I see. It's not the same thing I was thinking of. Sure, a separate issue is fine.

Ah I see. It's not the same thing I was thinking of. Sure, a separate issue is fine.

will do

There is a numerical discrepancy between CPython and IronPython when the float is of the form X.555 and `ndigits = 2)
CPython
>>> round(1.5, 0)
2.0
>>> round(1.55, 1)
1.6
>>> round(1.555, 2)
1.55

IronPython
>>> round(1.5, 0)
2.0
>>> round(1.55, 1)
1.6000000000000001
>>> round (1.555, 2)
1.5600000000000001
>>>

IronPython looks right and I doubt there is any way of reconciling that.
What do you think?

Hmm, round(1.555, 2) is surprising since the representation of 1.555 is 1.5549999999999999378275106209912337362766265869140625 it should be rounding to 1.55...

Ah, I see, rounding will multiply by 100 which changes the value to 155.5 which is exact then it rounds to even. I don't know how precise Math.Round(value, precision, mode) is, but we might be able to call it directly when precision is <= 15?

Ah, I see, rounding will multiply by 100 which changes the value to 155.5 which is exact then it rounds to even. I don't know how precise Math.Round(value, precision, mode) is, but we might be able to call it directly when precision is <= 15?

I've just tried that in C# interactive
> var x = Math.Round(1.555, 2, MidpointRounding.ToEven);
> x
1.56

So it does exactly what IronPython does.
How did you calculate that exact representation by the way?

Well that's unfortunate. Maybe I could file an issue on corefx to get it fixed in .NET Core (but to support .NET Framework we'd have to roll our own ☹).
decimal.Decimal(1.555)

Probably this bug: https://github.com/dotnet/corefx/issues/36982

Probably this bug: dotnet/corefx#36982

Yes, that looks like the fellow.

generally incorrect result most of the time

That fills one with confidence.
(I think the example above is a bit better than theirs 😉)

Thanks for being patient with all my comments! If you're happy with this I'll merge it in.

You're the boss! I'm learning a lot and new to the codebase, so all of the feedback is very useful.


Lock ant-design/icons dependency version

PR Checklist
Please check if your PR fulfills the following requirements:

[x] The commit message follows our guidelines: https://refine.dev/docs/guides-concepts/contributing/#commit-convention

Bugs / Features

[ ] Related issue(s) linked
[ ] Tests for the changes have been added
[ ] Docs have been added / updated
[ ] Changesets have been added https://refine.dev/docs/guides-concepts/contributing/#creating-a-changeset

What is the current behavior?
Re-add locking of "@ant-design/icons" to known working behavior
What is the new behavior?
Bypasses issue #5931
Notes for reviewers

Hey @bombillazo can you do the changes for every occurence of this package? Also don't forget to do pnpm install after the changes, so pnpm-lock.yaml will also be updated. Also make sure to create patch changeset for affected packages.

This error pops up after trying to update the branch

This error pops up after trying to update the branch

Hey @bombillazo, this is probably thrown because there are mismatching dependencies in examples etc. for @ant-design/icons. Can you try fixing the version for all occurrences and see if the issue persists? 🙏

OK now its updated


Connection drops for batch of clients

I am struggling with a project that has things (ESP8266 as clients) communicating to VerneMQ running on a DigitalOcean droplet. We have about 200 things at different locations sending about 20msg per minute each. Yesterday 8 things (out of 40 at that location) suddenly were not able to connect to the server/publish anymore although they have been online. Today 4 other clients (out of 20) at another location were refused by the MQTT server (I guess) or could not connect the same second.
All clients were able to connect to MQTT again by simply restarting them.
First we thought it was a network issue but it all seems to be fine. Can you help us troubleshooting the issue? We run a DigitalOcean droplet for our mqtt server. We do not think that it's the ESP8266 as there is no reason for them to all drop connection at the very same time.
Thank you very much in advance. Please let me know if you need some more specs.
Environment

VerneMQ Version: 1.7.1
OS: Ubuntu 16.04.6 x64
Server config: 4 GB Memory / 80 GB Disk
Cluster size/standalone: 1

Expected behavior

Clients connect to the MQTT server and publish data to diverse topics. Each client has a unique ID (MAC address).

Actual behaviour

Clients connect to the MQTT server and publish data to diverse topics. Occasionally a batch of clients drops connection at the same time and is not able to reconnect unless the devices are rebooted.

Metrics
counter.mqtt_pubrel_received = 31270032
gauge.system_utilization_scheduler_3 = 0
counter.queue_message_expired = 0
counter.socket_error = 0
counter.mqtt_pubcomp_invalid_error = 0
counter.mqtt_disconnect_sent = 0
gauge.vm_memory_atom = 553593
counter.queue_setup = 235905
counter.mqtt_unsuback_sent = 226
gauge.retain_memory = 198320
counter.mqtt_connect_received = 237280
counter.mqtt_publish_sent = 69484895
gauge.retain_messages = 399
gauge.router_memory = 117840
counter.mqtt_pingresp_sent = 62243380
gauge.vm_memory_atom_used = 532599
counter.mqtt_connack_server_unavailable_sent = 0
gauge.vm_memory_code = 9660442
gauge.system_run_queue = 0
counter.socket_close = 404918
counter.mqtt_connack_sent = 237280
counter.mqtt_subscribe_error = 0
counter.mqtt_subscribe_received = 61757
gauge.vm_memory_processes_used = 7894448
gauge.system_utilization = 28
counter.mqtt_subscribe_auth_error = 0
gauge.vm_memory_ets = 6430528
counter.system_wallclock =<PHONE_NUMBER>
counter.mqtt_pubrec_invalid_error = 0
counter.mqtt_connack_unacceptable_protocol_sent = 0
counter.mqtt_invalid_msg_size_error = 0
counter.mqtt_connack_not_authorized_sent = 0
counter.mqtt_unsubscribe_error = 0
counter.mqtt_pubrec_sent = 31274485
counter.queue_message_drop = 0
counter.mqtt_pingreq_received = 62243380
counter.mqtt_unsubscribe_received = 226
gauge.vm_memory_system = 48589008
counter.mqtt_publish_error = 0
counter.mqtt_pubcomp_received = 4498528
counter.mqtt_puback_received = 220
counter.netsplit_resolved = 0
counter.mqtt_suback_sent = 61757
counter.cluster_bytes_sent = 0
gauge.vm_memory_total = 56484056
counter.system_exact_reductions =<PHONE_NUMBER>62
counter.mqtt_puback_invalid_error = 0
counter.cluster_bytes_dropped = 0
gauge.system_utilization_scheduler_2 = 13
counter.mqtt_pubrec_received = 4498545
counter.netsplit_detected = 0
counter.mqtt_auth_received = 0
gauge.vm_memory_processes = 7895048
gauge.system_utilization_scheduler_1 = 100
gauge.system_utilization_scheduler_4 = 0
counter.system_words_reclaimed_by_gc =<PHONE_NUMBER>38
counter.system_context_switches =<PHONE_NUMBER>
counter.system_io_in =<PHONE_NUMBER>
counter.queue_initialized_from_storage = 1
counter.system_reductions =<PHONE_NUMBER>43
gauge.system_process_count = 427
gauge.router_subscriptions = 66
counter.mqtt_puback_sent = 9235542
counter.mqtt_pubrel_sent = 4498545
counter.client_expired = 0
counter.system_gc_count = 310012402
counter.system_runtime = 52064164
gauge.vm_memory_binary = 22891712
counter.mqtt_auth_sent = 0
counter.system_io_out =<PHONE_NUMBER>
counter.bytes_received =<PHONE_NUMBER>
counter.mqtt_disconnect_received = 170508
counter.bytes_sent =<PHONE_NUMBER>
counter.cluster_bytes_received = 0
counter.queue_message_unhandled = 298
counter.mqtt_publish_received = 42459582
gauge.queue_processes = 59
counter.mqtt_connack_accepted_sent = 0
counter.queue_message_out = 69485211
counter.socket_open = 404977
counter.queue_message_in = 69489793
counter.mqtt_pubcomp_sent = 31270012
counter.mqtt_publish_auth_error = 0
counter.mqtt_connack_identifier_rejected_sent = 0
counter.queue_teardown = 235846
counter.mqtt_connack_bad_credentials_sent = 0

Console Log (Extract)
... hundreds of entries per day like (not just the occasions mentioned above)...
2019-06-29 00:56:57.512 [warning] <0.2633.80>@vmq_mqtt_fsm:connected:427 client {[],<<"CLIENT_ID">>} with username <<"USERNAME">> stopped due to keepalive expired

Hi @kinitzki, this seems to indicate that there is either a network component between the devices and the broker that might disconnect clients, or maybe the client themselves do not observe the keepalive they set. The latter is unlikely, I think.
Do you see any error logged on broker or client side, for the client not able to re-connect? are they rejected by the broker? do they time out? (no CONNACK received for instance)

@ioolkos thanks for your reply. Can you give me advice on how to troubleshoot the possibilities you mentioned? Unfortunately the locations are located in different countries so that we cannot just check the logs so we would have to know what / how to look for.
Just the MQTT server and test clients are under our control - not the network topology in the locations.

@kinitzki I saw you're using Retained Messages. Can you tell me more about the Retain Topic, e.g. how it looks? Thanks.

@dergraf here is an example of two messages:
11.2;SLF;1562127968
qos : 0, retain : true, cmd : publish, dup : false, topic : topic/2C3AE84F2EEE/3/1, messageId : , length : 44, Raw payload :<PHONE_NUMBER>8376705949535450495055575456

6871
qos : 0, retain : true, cmd : publish, dup : false, topic : topic/2C3AE84F2EEE/1/3, messageId : , length : 29, Raw payload : 54565549

I hope it's what you meant.

Here are some current logs from today. The issues happened on 2nd and 3rd of July. We checked today and it does not look like any issues happened yesterday and today.
error.log:
2019-07-05 00:54:21 =ERROR REPORT====
Error in process <0.1118.88> on node<EMAIL_ADDRESS>with exit value:
{function_clause,[{cow_qs,unhex,"u",[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,345}]},{cow_qs,urldecode,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,336}]},{cowboy_router,'-split_path/2-lc$^1/1-1-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,'-split_path/2-lc$^1/1-1-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,334}]},{cowboy_router,match_path,4,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,271}]},{cowboy_router,execute,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,169}]}]}

2019-07-05 00:54:21 =ERROR REPORT====
Ranch listener {{0,0,0,0},8888} had connection process started with cowboy_protocol:start_link/4 at <0.1118.88> exit with reason: {function_clause,[{cow_qs,unhex,"u",[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,345}]},{cow_qs,urldecode,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,336}]},{cowboy_router,'-split_path/2-lc$^1/1-1-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,'-split_path/2-lc$^1/1-1-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,334}]},{cowboy_router,match_path,4,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,271}]},{cowboy_router,execute,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,169}]}]}

2019-07-05 00:54:23 =ERROR REPORT====
Error in process <0.1121.88> on node<EMAIL_ADDRESS>with exit value:
{function_clause,[{cow_qs,unhex,"u",[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,345}]},{cow_qs,urldecode,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,336}]},{cowboy_router,'-split_path/2-lc$^1/1-1-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,'-split_path/2-lc$^1/1-1-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,334}]},{cowboy_router,match_path,4,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,271}]},{cowboy_router,execute,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,169}]}]}

2019-07-05 00:54:23 =ERROR REPORT====
Ranch listener {{0,0,0,0},8888} had connection process started with cowboy_protocol:start_link/4 at <0.1121.88> exit with reason: {function_clause,[{cow_qs,unhex,"u",[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,345}]},{cow_qs,urldecode,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,336}]},{cowboy_router,'-split_path/2-lc$^1/1-1-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,'-split_path/2-lc$^1/1-1-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,334}]},{cowboy_router,match_path,4,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,271}]},{cowboy_router,execute,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,169}]}]}

2019-07-05 00:55:04 =ERROR REPORT====
Ranch listener {{0,0,0,0},8888} had connection process started with cowboy_protocol:start_link/4 at <0.1194.88> exit with reason: {function_clause,[{cow_qs,unhex,"N",[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,345}]},{cow_qs,urldecode,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,336}]},{cowboy_router,'-split_path/2-lc$^0/1-0-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,329}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,329}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,334}]},{cowboy_router,match_path,4,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,271}]},{cowboy_router,execute,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,169}]},{cowboy_protocol,execute,4,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_protocol.erl"},{line,442}]}]}

2019-07-05 00:55:04 =ERROR REPORT====
Error in process <0.1194.88> on node<EMAIL_ADDRESS>with exit value:
{function_clause,[{cow_qs,unhex,"N",[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,345}]},{cow_qs,urldecode,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,336}]},{cowboy_router,'-split_path/2-lc$^0/1-0-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,329}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,329}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,334}]},{cowboy_router,match_path,4,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,271}]},{cowboy_router,execute,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,169}]},{cowboy_protocol,execute,4,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_protocol.erl"},{line,442}]}]}

2019-07-05 01:00:25 =ERROR REPORT====
Ranch listener {{0,0,0,0},8888} had connection process started with cowboy_protocol:start_link/4 at <0.1869.88> exit with reason: {function_clause,[{cowboy_protocol,parse_uri_path,[<<>>,{state,#Port<0.408713>,ranch_tcp,[cowboy_router,cowboy_handler],false,[{listener,{{0,0,0,0},8888}},{dispatch,[{'_',[],[{[<<"metrics">>],[],vmq_metrics_http,[]},{[<<"api">>,<<"v1">>,'...'],[],vmq_http_mgmt_api,[]},{[<<"status.json">>],[],vmq_status_http,[]},{[<<"status">>],[],cowboy_static,{priv_file,vmq_server,"static/index.html"}},{[<<"status">>,'...'],[],cowboy_static,{priv_dir,vmq_server,"static"}},{[<<"health">>],[],vmq_health_http,[]}]}]}],undefined,undefined,5,1,100,4096,64,4096,100,5000,1562288430480},<<"t3">>,<<"12.2.1\nAS:255\nHL:19\nMS:10000000\n\n">>],[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_protocol.erl"},{line,200}]}]}

2019-07-05 01:00:25 =ERROR REPORT====
Error in process <0.1869.88> on node<EMAIL_ADDRESS>with exit value:
{function_clause,[{cowboy_protocol,parse_uri_path,[<<>>,{state,#Port<0.408713>,ranch_tcp,[cowboy_router,cowboy_handler],false,[{listener,{{0,0,0,0},8888}},{dispatch,[{'_',[],[{[<<"metrics">>],[],vmq_metrics_http,[]},{[<<"api">>,<<"v1">>,'...'],[],vmq_http_mgmt_api,[]},{[<<"status.json">>],[],vmq_status_http,[]},{[<<"status">>],[],cowboy_static,{priv_file,vmq_server,"static/index.html"}},{[<<"status">>,'...'],[],cowboy_static,{priv_dir,vmq_server,"static"}},{[<<"health">>],[],vmq_health_http,[]}]}]}],undefined,undefined,5,1,100,4096,64,4096,100,5000,1562288430480},<<"t3">>,<<"12.2.1\nAS:255\nHL:19\nMS:10000000\n\n">>],[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_protocol.erl"},{line,200}]}]}

console.log:
2019-07-05 00:50:05.046 [warning] <0.640.88>@vmq_ranch:teardown:138 session stopped abnormally due to '{cant_parse_connect_fixed_header,<<"GET / HTTP/1.0\r\n\r\n">>}'
2019-07-05 00:50:05.440 [warning] <0.611.88>@vmq_ranch:teardown:138 session stopped abnormally due to '{cant_parse_connect_fixed_header,<<0,0,0,22,128,1,0,1,0,0,0,9,103,101,116,76,101,97,100,101,114,0,0,0,1,0>>}'
2019-07-05 00:50:05.441 [warning] <0.606.88>@vmq_ranch:teardown:138 session stopped abnormally due to '{cant_parse_connect_fixed_header,<<73,0,0,0,102,0,0,0>>}'
2019-07-05 00:50:05.495 [warning] <0.658.88>@vmq_ranch:teardown:138 session stopped abnormally due to '{cant_parse_connect_fixed_header,<<0,0,0,64,2,3,172,16,10,199,0,0,0,0,115,97,112,103,119,48,49,0,0,0,52,49,48,51,0,0,0,0,0,0,115,97,112,115,101,114,118,101,115,97,112,103,119,48,49,32,32,32,32,32,32,32,32,32,6,11,255,255,0,0,0,0,0,0>>}'
2019-07-05 00:50:12.638 [warning] <0.32593.87>@vmq_ranch:teardown:138 session stopped abnormally due to '{cant_parse_connect_fixed_header,<<"HELP\r\n">>}'
2019-07-05 00:50:51.966 [warning] <0.733.88>@vmq_ranch:teardown:138 session stopped abnormally due to '{cant_parse_connect_fixed_header,<<3,0,0,19,14,224,0,0,0,0,0,1,0,8,0,0,0,0,0>>}'
2019-07-05 00:54:21.303 [error] emulator Error in process <0.1118.88> on node<EMAIL_ADDRESS>with exit value:
{function_clause,[{cow_qs,unhex,"u",[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,345}]},{cow_qs,urldecode,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,336}]},{cowboy_router,'-split_path/2-lc$^1/1-1-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,'-split_path/2-lc$^1/1-1-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,334}]},{cowboy_router,match_path,4,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,271}]},{cowboy_router,execute,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,169}]}]}
2019-07-05 00:54:21.303 [error] <0.1118.88>@cow_qs:unhex:345 Ranch listener {{0,0,0,0},8888} terminated with reason: no function clause matching cow_qs:unhex(117) line 345
2019-07-05 00:54:23.258 [error] emulator Error in process <0.1121.88> on node<EMAIL_ADDRESS>with exit value:
{function_clause,[{cow_qs,unhex,"u",[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,345}]},{cow_qs,urldecode,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,336}]},{cowboy_router,'-split_path/2-lc$^1/1-1-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,'-split_path/2-lc$^1/1-1-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,334}]},{cowboy_router,match_path,4,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,271}]},{cowboy_router,execute,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,169}]}]}
2019-07-05 00:54:23.258 [error] <0.1121.88>@cow_qs:unhex:345 Ranch listener {{0,0,0,0},8888} terminated with reason: no function clause matching cow_qs:unhex(117) line 345
2019-07-05 00:55:04.506 [error] <0.1194.88>@cow_qs:unhex:345 Ranch listener {{0,0,0,0},8888} terminated with reason: no function clause matching cow_qs:unhex(78) line 345
2019-07-05 00:55:04.506 [error] emulator Error in process <0.1194.88> on node<EMAIL_ADDRESS>with exit value:
{function_clause,[{cow_qs,unhex,"N",[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,345}]},{cow_qs,urldecode,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,336}]},{cowboy_router,'-split_path/2-lc$^0/1-0-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,329}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,329}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,334}]},{cowboy_router,match_path,4,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,271}]},{cowboy_router,execute,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,169}]},{cowboy_protocol,execute,4,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_protocol.erl"},{line,442}]}]}
2019-07-05 00:56:43.597 [warning] <0.1435.88>@vmq_ranch:teardown:138 session stopped abnormally due to '{cant_parse_connect_fixed_header,<<"GET / HTTP/1.1\r\nHost: xxx:1883\r\nAccept-Charset: iso-8859-1,utf-8;q=0.9,*;q=0.1\r\nAccept-Language: en\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)\r\nPragma: no-cache\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\n\r\n">>}'
2019-07-05 00:56:43.997 [warning] <0.1407.88>@vmq_ranch:teardown:138 session stopped abnormally due to '{cant_parse_connect_fixed_header,<<22,3,1,2,0,1,0,1,252,3,3,62,132,253,209,145,36,163,14,89,167,36,139,190,199,153,6,146,78,188,142,1,48,197,34,32,237,245,201,186,150,154,95,0,0,228,192,48,192,44,192,40,192,36,192,20,192,10,0,165,0,163,0,161,0,159,0,107,0,106,0,105,0,104,0,57,0,56,0,55,0,54,0,136,0,135,0,134,0,133,192,25,0,167,0,109,0,58,0,137,192,50,192,46,192,42,192,38,192,15,192,5,0,157,0,61,0,53,0,132,192,47,192,43,192,39,192,35,192,19,192,9,0,164,0,162,0,160,0,158,0,103,0,64,0,63,0,62,0,51,0,50,0,49,0,48,0,154,0,153,0,152,0,151,0,69,0,68,0,67,0,66,192,24,0,166,0,108,0,52,0,155,0,70,192,49,192,45,192,41,192,37,192,14,192,4,0,156,0,60,0,47,0,150,0,65,0,7,192,17,192,7,192,22,0,24,192,12,192,2,0,5,0,4,192,18,192,8,0,22,0,19,0,16,0,13,192,23,0,27,192,13,192,3,0,10,0,21,0,18,0,15,0,12,0,26,0,9,0,20,0,17,0,25,0,8,0,6,0,23,0,3,0,255,2,1,0,0,238,0,11,0,4,3,0,1,2,0,10,0,28,0,26,0,23,0,25,0,28,0,27,0,24,0,26,0,22,0,14,0,13,0,11,0,12,0,9,0,10,0,35,0,0,0,13,0,32,0,30,6,1,6,2,6,3,5,1,5,2,5,3,4,1,4,2,4,3,3,1,3,2,3,3,2,1,2,2,2,3,0,15,0,1,1,0,21,0,149,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>>}'
2019-07-05 00:59:25.712 [warning] <0.1752.88>@vmq_ranch:teardown:138 session stopped abnormally due to '{cant_parse_connect_fixed_header,<<"GET / HTTP/1.1\r\nConnection: Close\r\nHost: xxx\r\nPragma: no-cache\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\n\r\n">>}'
2019-07-05 00:59:26.015 [warning] <0.1742.88>@vmq_ranch:teardown:138 session stopped abnormally due to '{cant_parse_connect_fixed_header,<<"GET login?hsgid=00000000-0000-0000-0000-000000000000&hasFP=1 HTTP/1.1\r\nHost: xxx:1883\r\nAccept-Charset: iso-8859-1,utf-8;q=0.9,*;q=0.1\r\nAccept-Language: en\r\nConnection: Close\r\nAccept-Encoding: gzip\r\nClient-ATV-Sharing-Version: 1.2\r\nClient-DAAP-Version: 3.13\r\nClient-iTunes-Sharing-Version: 3.15\r\nViewer-Only-Client: 1\r\nUser-Agent: Remote/1021\r\nPragma: no-cache\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\n\r\n">>}'
2019-07-05 00:59:33.100 [error] <0.1774.88>@vmq_http_mgmt_api:malformed_request:79 malformed request {no_matching_spec,["vmq-admin","format=api","--format=json"]}
2019-07-05 01:00:09.913 [error] <0.1864.88>@vmq_http_mgmt_api:malformed_request:79 malformed request {no_matching_spec,["vmq-admin","format=api","--format=json"]}
2019-07-05 01:00:25.565 [error] <0.1869.88>@cowboy_protocol:parse_uri_path:200 Ranch listener {{0,0,0,0},8888} terminated with reason: no function clause matching cowboy_protocol:parse_uri_path(<<>>, {state,#Port<0.408713>,ranch_tcp,[cowboy_router,cowboy_handler],false,[{listener,{{0,0,0,0},8888}},...],...}, <<"t3">>, <<"12.2.1\nAS:255\nHL:19\nMS:10000000\n\n">>) line 200
2019-07-05 01:00:25.566 [error] emulator Error in process <0.1869.88> on node<EMAIL_ADDRESS>with exit value:
{function_clause,[{cowboy_protocol,parse_uri_path,[<<>>,{state,#Port<0.408713>,ranch_tcp,[cowboy_router,cowboy_handler],false,[{listener,{{0,0,0,0},8888}},{dispatch,[{'_',[],[{[<<"metrics">>],[],vmq_metrics_http,[]},{[<<"api">>,<<"v1">>,'...'],[],vmq_http_mgmt_api,[]},{[<<"status.json">>],[],vmq_status_http,[]},{[<<"status">>],[],cowboy_static,{priv_file,vmq_server,"static/index.html"}},{[<<"status">>,'...'],[],cowboy_static,{priv_dir,vmq_server,"static"}},{[<<"health">>],[],vmq_health_http,[]}]}]}],undefined,undefined,5,1,100,4096,64,4096,100,5000,1562288430480},<<"t3">>,<<"12.2.1\nAS:255\nHL:19\nMS:10000000\n\n">>],[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_protocol.erl"},{line,200}]}]}
2019-07-05 01:09:02.677 [warning] <0.2340.88>@vmq_mqtt_fsm:connected:427 client {[],<<"6001947056C8">>} with username <<"USER">> stopped due to keepalive expired
2019-07-05 01:16:55.864 [warning] <0.2582.88>@vmq_mqtt_fsm:connected:427 client {[],<<"6001947056C8">>} with username <<"USER">> stopped due to keepalive expired
2019-07-05 01:24:25.904 [warning] <0.16889.87>@vmq_mqtt_fsm:connected:427 client {[],<<"BCDDC29D6258">>} with username <<"USER">> stopped due to keepalive expired
2019-07-05 03:34:16.654 [warning] <0.15288.87>@vmq_mqtt_fsm:connected:427 client {[],<<"ECFABC286B3E">>} with username <<"USER">> stopped due to keepalive expired
…

error.log:
2019-07-05 00:54:21.303 [error] emulator Error in process <0.1118.88> on node<EMAIL_ADDRESS>with exit value:
{function_clause,[{cow_qs,unhex,"u",[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,345}]},{cow_qs,urldecode,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,336}]},{cowboy_router,'-split_path/2-lc$^1/1-1-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,'-split_path/2-lc$^1/1-1-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,334}]},{cowboy_router,match_path,4,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,271}]},{cowboy_router,execute,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,169}]}]}
2019-07-05 00:54:21.303 [error] <0.1118.88>@cow_qs:unhex:345 Ranch listener {{0,0,0,0},8888} terminated with reason: no function clause matching cow_qs:unhex(117) line 345
2019-07-05 00:54:23.258 [error] emulator Error in process <0.1121.88> on node<EMAIL_ADDRESS>with exit value:
{function_clause,[{cow_qs,unhex,"u",[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,345}]},{cow_qs,urldecode,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,336}]},{cowboy_router,'-split_path/2-lc$^1/1-1-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,'-split_path/2-lc$^1/1-1-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,334}]},{cowboy_router,match_path,4,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,271}]},{cowboy_router,execute,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,169}]}]}
2019-07-05 00:54:23.258 [error] <0.1121.88>@cow_qs:unhex:345 Ranch listener {{0,0,0,0},8888} terminated with reason: no function clause matching cow_qs:unhex(117) line 345
2019-07-05 00:55:04.506 [error] <0.1194.88>@cow_qs:unhex:345 Ranch listener {{0,0,0,0},8888} terminated with reason: no function clause matching cow_qs:unhex(78) line 345
2019-07-05 00:55:04.506 [error] emulator Error in process <0.1194.88> on node<EMAIL_ADDRESS>with exit value:
{function_clause,[{cow_qs,unhex,"N",[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,345}]},{cow_qs,urldecode,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,336}]},{cowboy_router,'-split_path/2-lc$^0/1-0-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,329}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,329}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,334}]},{cowboy_router,match_path,4,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,271}]},{cowboy_router,execute,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,169}]},{cowboy_protocol,execute,4,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_protocol.erl"},{line,442}]}]}
2019-07-05 00:59:33.100 [error] <0.1774.88>@vmq_http_mgmt_api:malformed_request:79 malformed request {no_matching_spec,["vmq-admin","format=api","--format=json"]}
2019-07-05 01:00:09.913 [error] <0.1864.88>@vmq_http_mgmt_api:malformed_request:79 malformed request {no_matching_spec,["vmq-admin","format=api","--format=json"]}
2019-07-05 01:00:25.565 [error] <0.1869.88>@cowboy_protocol:parse_uri_path:200 Ranch listener {{0,0,0,0},8888} terminated with reason: no function clause matching cowboy_protocol:parse_uri_path(<<>>, {state,#Port<0.408713>,ranch_tcp,[cowboy_router,cowboy_handler],false,[{listener,{{0,0,0,0},8888}},...],...}, <<"t3">>, <<"12.2.1\nAS:255\nHL:19\nMS:10000000\n\n">>) line 200
2019-07-05 01:00:25.566 [error] emulator Error in process <0.1869.88> on node<EMAIL_ADDRESS>with exit value:
{function_clause,[{cowboy_protocol,parse_uri_path,[<<>>,{state,#Port<0.408713>,ranch_tcp,[cowboy_router,cowboy_handler],false,[{listener,{{0,0,0,0},8888}},{dispatch,[{'_',[],[{[<<"metrics">>],[],vmq_metrics_http,[]},{[<<"api">>,<<"v1">>,'...'],[],vmq_http_mgmt_api,[]},{[<<"status.json">>],[],vmq_status_http,[]},{[<<"status">>],[],cowboy_static,{priv_file,vmq_server,"static/index.html"}},{[<<"status">>,'...'],[],cowboy_static,{priv_dir,vmq_server,"static"}},{[<<"health">>],[],vmq_health_http,[]}]}]}],undefined,undefined,5,1,100,4096,64,4096,100,5000,1562288430480},<<"t3">>,<<"12.2.1\nAS:255\nHL:19\nMS:10000000\n\n">>],[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_protocol.erl"},{line,200}]}]}

Here is the part of the console log where the clients had issues reconnecting. Those lines are among the hundreds of others of the same form.
2019-07-04 03:48:04.729 [warning] <0.26596.86>@vmq_mqtt_fsm:connected:427 client {[],<<"600194705631">>} with username <<"USER">> stopped due to keepalive expired
2019-07-04 03:49:43.506 [warning] <0.17519.85>@vmq_mqtt_fsm:connected:427 client {[],<<"600194705D28">>} with username <<"USER">> stopped due to keepalive expired
2019-07-04 03:49:44.912 [warning] <0.4420.86>@vmq_mqtt_fsm:connected:427 client {[],<<"600194705E9E">>} with username <<"USER">> stopped due to keepalive expired
2019-07-04 03:49:46.161 [warning] <0.4485.86>@vmq_mqtt_fsm:connected:427 client {[],<<"60019470690D">>} with username <<"USER">> stopped due to keepalive expired
2019-07-04 03:49:46.291 [warning] <0.17512.85>@vmq_mqtt_fsm:connected:427 client {[],<<"2C3AE84F253E">>} with username <<"USER">> stopped due to keepalive expired
2019-07-04 03:49:46.405 [warning] <0.8471.86>@vmq_mqtt_fsm:connected:427 client {[],<<"600194705C70">>} with username <<"USER">> stopped due to keepalive expired
2019-07-04 03:49:47.185 [warning] <0.18679.85>@vmq_mqtt_fsm:connected:427 client {[],<<"600194705FDD">>} with username <<"USER">> stopped due to keepalive expired

In general. Is it strange that we have so many of those messages in our log?

In general, is it suspicious to have so many keepalive messages in our scenario?

Hi @kinitzki
I'm intrigued by the function clause lines:
2019-07-05 00:54:21 =ERROR REPORT====
Error in process <0.1118.88> on node<EMAIL_ADDRESS>with exit value:
{function_clause,[{cow_qs,unhex,"u",[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,345}]},{cow_qs,urldecode,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowlib/src/cow_qs.erl"},{line,336}]},{cowboy_router,'-split_path/2-lc$^1/1-1-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,'-split_path/2-lc$^1/1-1-',1,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,331}]},{cowboy_router,split_path,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,334}]},{cowboy_router,match_path,4,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,271}]},{cowboy_router,execute,2,[{file,"/opt/vernemq/distdir/1.7.1/_build/default/lib/cowboy/src/cowboy_router.erl"},{line,169}]}]}

I'd think those are due to some commands being dispatched via the HTTP admin API, it would be interesting if you have some examples which reproduce those - perhaps there's' something we can improve there.
Regarding the keepalive expired issue, it's hard to give concrete advice in the nature of the issue this means the clients are not responding in a timely manner as they should according to their keepalive setting in the CONNECT packet or the traffic is somehow delayed. This can't be debugged within Verne, but you'd have to look at what happens between the clients and Verne. What you can do is (if feasibly) is to log all MQTT data coming into VerneMQ using tcpdump/wireshark or similar and then look at the data from some sample clients which are disconnected due to the keepalive timeout being exceeded. Perhaps this will point you to perhaps misconfigured devices etc.


Failed to load custom environment from JS file

Describe the bug
The documentation at https://vitest.dev/guide/environment.html#custom-environment states that since v0.34.0 a custom environment can be a valid JS file (instead of a vitest-environment-${name} package).
However, with a configuration like the following
export default defineConfig({
  test: {
    environment: './custom.js',
  },
});

it still tries to load the custom environment from a package:
 MISSING DEP  Can not find dependency 'vitest-environment-./custom.js'

The resolve logic seems to differentiate correctly here:
https://github.com/vitest-dev/vitest/blob/22181f0209992aa4e054dd18cab045007186aa48/packages/vitest/src/integrations/env/index.ts#L55-L57
So I'd guess there's an issue in the loader used at the next line:
https://github.com/vitest-dev/vitest/blob/22181f0209992aa4e054dd18cab045007186aa48/packages/vitest/src/integrations/env/index.ts#L58

Also – at least with the package setup – it seems like the file is preprocessed again, despite the statement from v0.34.0:

Custom environment now should be processed before Vitest can consume it. It means that you cannot specify a path to a TS file or use import paths that should be processed by Vite.

For example, a setup like this works fine: https://github.com/vitest-dev/vitest/blob/main/test/env-custom/vitest-environment-custom/package.json
Related to https://github.com/vitest-dev/vitest/pull/4196?
If this is indeed supported again and once this issue here has been addressed, could the documentation be updated to specify a path to a valid JS/TS file?
Reproduction
https://stackblitz.com/edit/vitest-dev-vitest-uefbmr
System Info
System:
    OS: macOS 13.5.2
    CPU: (16) x64 Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
    Memory: 9.84 GB / 32.00 GB
    Shell: 5.2.15 - /usr/local/bin/bash
  Binaries:
    Node: 18.18.0 - /usr/local/opt/node@18/bin/node
    npm: 10.1.0 - /usr/local/bin/npm
    pnpm: 8.8.0 - /usr/local/bin/pnpm
  npmPackages:
    vitest: 0.34.6 => 0.34.6

Used Package Manager
pnpm
Validations

[X] Follow our Code of Conduct
[X] Read the Contributing Guidelines.
[X] Read the docs.
[X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
[X] Check that this is a concrete bug. For Q&A open a GitHub Discussion or join our Discord Chat Server.
[X] The provided reproduction is a minimal reproducible example of the bug.

Looks like resolvePath fails here.

Also – at least with the package setup – it seems like the file is preprocessed again

Yes, the behaviour was reverted, but I forgot to update documentation it looks like. This was intended change.


How to Help?

I was excited to see your project.  I have a T-Watch S3 and it is very frustrating to try to develop software for.  Is there any way that I can help you?  I am an experienced Python programmer and have also used LoRa with Meshtastic for a few years.

Hi @brucekissinger! Thanks for writing :) I believe it is possible to create some great MicroPython ecosystem for the Lilygo devices without huge efforts, because they hopefully will tend to use similar components for the next devices as well.
Currently I'm focusing on writing a simple driver for the SX1262 chip in the t-watch S3. There are other drivers, but the driver I wrote in FreakWAN for the SX1276 is 350 heavy commented lines and I can only find SX1262 drivers written in MicroPython that are 10x the size and without comments! So I'm going to rewrite it in order to be API compatible with the other driver I implemented, so that I can use it in FreakWAN without changing the internals.
But while implementing it, I'll not have bandwidth for all the other chips that there are in the t-watch S3, and that would be an awesome starting point, if you would like to write a small self contained driver for one of the i2c devices like the touch screen driver, the haptic motor, the sounds generator or whatever you like more. Ideally it should be few code that accomplishes enough to make it usable, with a small example functionality inside "main" or as another file if it is not possible to integrate it.
Consider that very soon we will be able to write fonts on the screen as I already have the code in FreakWAN, and even a font I hand-crafted, so more convoluted examples should be possible. Thanks! Have a nice day.


If it somehow does on @danstarns's machine, it may be the reason behind https://github.com/prisma/prisma/issues/13092


Built-in pluralize helper support

I just discovered Plop and was amazed by how easy it is to use! Kudos to you sir!
I would like to ask if there are plans to add support for a built-in pluralize helper so that I can emulate what Rails does when I run the rails generate scaffold command, to generate certain file/folder names contain the plural version of the input I pass into my plop generator.
If you are open to that idea I can make a PR for it 😄

Yeah, you could pretty easily use something like the handlebars-helper-pluralize to accomplish this. As far as providing a built-in helper, I would not think that this would be used enough to warrant going in at that level.
I've been trying to keep the built-in helpers to including only those helpers which would be used in 90% of projects.

Thanks, I ended up doing that 😄
Got it, will close this since it's not relevant.


Other functions beside viewer

Thanks for your great effort :)
I'm just wondering if there are any more functions beside basic 3D viewer.
ex) Turning on AR when button pressed, changing model viewer's background
Thank you :)

Hello, thank you,
Other functions are, animations, events (promises, observables and callbacks), camera settings, scene. All properties is here. If you need spesific feature, I can think about it to add in future.
Unfortunetly this library (babylonjs viewer) not support AR directly. If you need AR you can visit this library.

Thank you for your reply.
Will be greatful if you add more features in future
Wish you the best :)


Support non-root deployments

Description
It's not currently possible to support non-root deployments with the Helm charts. In order to do so, we need to:

Allow users to configure the StatefulSet's .spec.template.securityContext so users can add runAsUser, runAsGroup, and fsGroup (and set it to 1000 as recommended value)
Update the volumes section and set the defaultMode of the config volume to 0777 instead of 0744.

This is an important feature for us :(

Feel free to create an PR

Thanks. here you go: https://github.com/camunda-community-hub/camunda-cloud-helm/pull/63

As written here https://github.com/camunda-community-hub/camunda-cloud-helm/pull/63#pullrequestreview-796174504

It seems in the StatefulSetSepc the securityContext can be added on two places. On the podSpec https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#podspec-v1-core where you have added it now and on the container level https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#container-v1-core which will overwrite then the podSpec SecurityContext, this is what we currently have.
I think this is also used by our benchmarks, I totally forgot about that sorry! You can see an example of it here https://github.com/camunda-cloud/zeebe/blob/develop/benchmarks/setup/default/zeebe-values.yaml#L14-L16

I think the current podSecurityContext is enough I will add it to the readme


Make motor_test motor index 1 based

For general questions please use PX4 Discuss or Slack.
Describe problem solved by the proposed feature
motor_test application in nsh is a great way to verify that motors are connected in a right order and turn in a right direction. However -m parameter (motor number) is 0-based. This is not consistent with the Frame Reference and dshot command, both of which use 1-based indexing.
Describe your preferred solution
motor_test command's -m parameter should be 1-based.
Describe possible alternatives
As this is binary decision, there are no (sane) alternatives to consider.
Additional context
N/A
I can make a pull-request for this feature, if the dev team will find it useful.

Yes I was considering doing that as well, a PR is welcome.


add bower.json

I agree with adding bower support, but many of the attributes of this file do not apply to this project. For example, name, description, and repository along with many other attributes are not correct.

A better practice is to move toward npm for front-end package management, but if you can't do that there is https://github.com/mjeanroy/bower-npm-resolver.


DISP-S1 Final SAS 0.5.2 Acceptance Test

Acceptance Test Procedure Steps

[x] Download the delivered SAS Docker image tarball from Artifactory

general/gov/nasa/jpl/opera/adt/disp_s1/r6.2/final/dockerimg_disp_s1_final.tar

[x] Download the delivered "golden" test data assets included with SAS delivery from Artifactory

general/gov/nasa/jpl/opera/adt/disp_s1/r6.2/final/delivery_data_small.tar

[x] Ensure the instance type of the development machine is set to the correct chip family (should be r6i.4xlarge to accommodate historical mode test)
[x] Load SAS docker image and deploy test data assets on development machine
[x] Modify provided RunConfig(s) as necessary (see previous AT wiki instructions, if available)
[x] Execute SAS container using provided sample inputs and RunConfig
[x] Perform Quality Assurance comparison check of output products with expected products from "golden" test data
[x] Create/Update Acceptance Testing Procedure wiki page

Be sure to include any changes to test data structure, file permissions, RunConfig changes etc.

[x] Include the results of Quality Assurance check at the bottom of the wiki page

Include any details on known failures or workarounds, and include a sample of the expected output from the comparison script
If the results of the comparison step are contingent on a particular instance type or chip family, be sure to note that as well

[x] Optional: Upload results of the Acceptance Test to S3

If the comparison step or the SAS itself is failing, this can be critical for sharing results with ADT
Otherwise, if everything is passing this step can be considered optional

Acceptance test passes when run on an AMD-based instance type. Will investigate improvements to disp-s1 validation routine to make the checks hardware-agnostic going forward.


Uncaught ReferenceError: webpackJsonp is not defined

Hey there,
great repo. helped me a lot to bootstrap my application. I run into one scenario, you might have an Idea.
I want to load a module delayed, depending on the interaction of the customer. I use
require.ensure("modulename") to do this. It works, there is a dedicated 0.0.js file created which will only be loaded when the customers clicks a button.
It works very well in the newtab.js but in the content.js which is injected in every page that the customer opens, i get a Uncaught ReferenceError: webpackJsonp is not defined (in the development env).
Do you know if the content.js is executed in a different namespace or something similar?
Would be a great feature to get this working.
thanks again

Awesome repo. Thank you!
@quorak ever figure this one out?

I think this will work if you add a third argument to require.ensure
Here is an example using content/index.js
document.addEventListener('click', () => {
  require.ensure([], () => {
    var welcome = require('shared/welcome').default
    welcome('content/index.js')
  }, 'content/index')
})


Fixed the possibility duplicate of uids of switch

It is the same modification as #100. According to the specification, the UID (0x83) of the node is the same as the UID (0x83) of each object in the node. From this, the node's UID + Code can have duplicate IDs.
However, this fix invalidates the entity already configured in HA and creates a new entity with that entity ID + "_2".
The user must remove the disabled entity and remove "_2" from the entity ID of the new entity.

Thanks! 👍


Blacklist Menue Not in Mobile Handy Version visible

Description
The Menue Point Blacklist IS Not available in the mobile Version
Version
Latest dev
Steps to Reproduce
Just Open the Website in you Phone.
Screenshots
No response
Logs
No response
Platform
smartphone
Device
Xiaomi
Operating System
Android 14
Browser
Chrome
Additional Context
No response
Code of Conduct

[X] I agree to follow Jellyseerr's Code of Conduct

I am using the German language.

:tada: This issue has been resolved in version 2.0.0 :tada:
The release is available on:

v2.0.0
GitHub release

Your semantic-release bot :package::rocket:


[Abide] validateInput fires twice

validateInput fires on blur and on change, so if you leave the input to the next it fires twice

Is this Equalizer or Abide?

sorry Abide

Should be fixed with #7590, please comment and submit pr's to the abide branch until 6.1 release.


how to detect if GPU is being used? (feature request)

In TF and PyTorch, there is an easy way to tell if the GPU is being used (see below).
How can we do this with jax?
import tensorflow as tf
if tf.test.is_gpu_available():
print(tf.test.gpu_device_name())
else:
print("TF cannot find GPU")
import torch
import torchvision
if torch.cuda.is_available():
print(torch.cuda.get_device_name(0))
else:
print("Torch cannot find GPU")

There's no true public API for this yet, but for right now you can do this:
from jax.lib import xla_bridge
print(xla_bridge.get_backend().platform)

and it will print cpu, gpu, or tpu. But note that API is internal and subject to change.
I agree we need a supported API, although exactly how that API will look will almost certainly evolve as we grow support for multiple kinds of devices in the same process.
Also note that if no GPU is found, JAX currently prints a loud warning the first time you run an op:
xla_bridge.py:130: UserWarning: No GPU/TPU found, falling back to CPU.
  warnings.warn('No GPU/TPU found, falling back to CPU.')

Do those address your immediate need, or do you need something better soon?

Thanks, that works.
On Wed, Jul 3, 2019 at 11:56 AM Peter Hawkins<EMAIL_ADDRESS>wrote:

There's no true public API for this yet, but for right now you can do this:
from jax.lib import xla_bridge
print(xla_bridge.get_backend().platform)
and it will print cpu, gpu, or tpu. But note that API is internal and
subject to change.
I agree we need a supported API, although exactly how that API will look
will almost certainly evolve as we grow support for multiple kinds of
devices in the same process.
Also note that if no GPU is found, JAX currently prints a loud warning the
first time you run an op:
xla_bridge.py:130: UserWarning: No GPU/TPU found, falling back to CPU.
warnings.warn('No GPU/TPU found, falling back to CPU.')
Do those address your immediate need, or do you need something better soon?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/google/jax/issues/971?email_source=notifications&email_token=ABDK6EBRGBGD5BS4YC4PL4TP5TY67A5CNFSM4H5ICXVKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODZFMI5Y#issuecomment-508216439,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABDK6EHJTTT2I4LO6GQSV43P5TY67ANCNFSM4H5ICXVA
.

Closing this because I think we sorted out the current solution. As Peter mentioned, we'll likely make and document a more general API at some point.

@hawkinsp shared this:

You can look at jax.devices(). For example, to see if you're connected to an accelerator, check jax.devices()[0].platform != "cpu".
devices returns devices from the preferred platform, and we always prefer an accelerator if you have one

Here's a slightly better thing to use: jax.default_backend(). JAX defaults to a GPU or TPU if you have one. So you can just check it doesn't return "cpu".

If I have multiple CPUs and GPUs in a cluster, will jax use them all or will just use 1cpu and 1gpu and have the others idle?

Still desired. Proposed approaches don't seem to detect if a GPU is available; what if there's both GPU and TPU? Also that they're "subject to change". Current best seems to be a Python classic, though it's perhaps slow:
def jax_has_gpu():
    try:
        _ = jax.device_put(jax.numpy.ones(1), device=jax.devices('gpu')[0])
        return True
    except:
        return False

>>> import jax
>>> jax.default_backend()
'gpu'
>>> def jax_has_gpu():
...     try:
...         _ = jax.device_put(jax.numpy.ones(1), device=jax.devices('gpu')[0])
...         return True
...     except:
...         return False
...
>>> jax_has_gpu()
True
>>>


Few issues in functional coverage for Enum types

Hi Matthew,
I have this small test program:
class my_e(IntEnum):
    A = auto()
    B = auto()

@vsc.covergroup
class my_cg(object):
    def __init__(self, a, b):
        super().__init__()
        self.cp1 = vsc.coverpoint(a,
                                  bins=dict(
                                      a=vsc.bin_array([], [1, 15])
                                  ))

        self.cp2 = vsc.coverpoint(b, cp_t=vsc.enum_t(my_e))

a = 1
b = my_e.A
cg = my_cg(lambda: a, lambda: b)
cg.sample()
vsc.report_coverage(details=True)

1- Although b = my_e.A in the above example, results show a hit for the second bin of  cp2:
CVP cp2 : 50.000000%
Bins:
    my_e.B : 0
    my_e.B : 1

To confirm this issue, if I change it to b = my_e.B in the example, I get 0% coverage (it's probably due to something like a delayed append to the list).
2- It works for IntEnum types and I get 50% coverage for the cp2. However, it doesn't work for Enum types: if I change my_e(IntEnum) to my_e(Enum), I'll get 0% coverage for cp2 which is not correct.
3- When the coverage report shows the individual bins for cp2, the key for all individual bins is the last member of Enum (my_e.B in this example):
CVP cp2 : 0.000000%
Bins:
   my_e.B : 0
   my_e.B : 0

Thanks,
Hodjat

Hi Hodjat,
Actually, I stumbled over this issue before seeing this report. There were a couple issues -- one with converting the enum value to an 'int' for sampling and one with naming of enum-type bins. Both should be resolved in 0.1.1. Please reopen this if not.
Best Regards,
Matthew

Hi Matthew,
Thanks a lot for fixing this issue. However, the second bullet (works for IntEnum but does not for Enum) still exists, which actually is not a big deal. Moreover, I think given the fact that I'm not a collaborator on this repo, I cannot re-open my own issue if you (as a repo collaborator) closed it.
Thanks,
Hodjat


add movie interface

@bendichter @luiztauffer @alejoe91 I recently encountered some .mpg files in my Buzsaki conversions, and after some work figured out how to add the data to the NWBFile in a way that can work with DANDI (DANDI does not accept non-NWB file types, so the old solution of writing in external mode doesn't work).
When developing the interface over there, I realized it was very generalizable to other file types, so figured it would be worth including on the main repo here. Let me know what you all think.
A couple things before I open this for final review:

[x] - [Should the pytest for github actions utilize a tempfile location?]
[x] - [Add a DataChunkIterator for larger files. Otherwise it tries to read the entire movie into RAM as the array.]

looks good, @CodyCBakerPhD!

            # data=H5DataIO(mov, compression="gzip", chunks=(1, frame_shape[0], frame_shape[1], 1)) # took 2:21 and 15x filesize
            data=H5DataIO(mov, compression="gzip", chunks=(1, frame_shape[0], frame_shape[1], 3)) # took 1:45 and 13.8x filesize
            # data=H5DataIO(mov, compression="gzip", chunks=(5, frame_shape[0], frame_shape[1], 3)) # took 6:33 and 13.8x filesize
            # data=H5DataIO(mov, compression="gzip", chunks=(30, frame_shape[0]/2, frame_shape[1]/2, 1)) # took 42:55 and 21.65x filesize
            # data=H5DataIO(mov, compression="gzip", chunks=(5, frame_shape[0]/2, frame_shape[1]/2, 1)) # took 7:57 and 20.8x filesize
            # data=H5DataIO(mov, compression="gzip", chunks=(total_frames/50, 1, 1, 3))  # took 1:30:00 for 78 iter
            # data=H5DataIO(mov, compression="gzip")  # predicted to take 8 hours

@bendichter @alejoe91 @luiztauffer Hey all - the MovieInterface PR is now ready for full review and final approval. No rush, take your time - feel free to ask questions and leave comments on anything that could be improved.
In particular, one thing I wanted to bring up is the structuring of our data interfaces folder on this repo - now that I have a separate util file (due to lazy import) just for movie stuff, which is actually quite useful more generally for downstream conversion stuff acting on movies, perhaps it would be best to move the MovieInterface class and the utils.py file into their own folder within the data interfaces folder? So that the two are more obviously linked/dependent.

Given Satra's approval of the current ImageSeries method of upload for DANDI, this should be clear for integration with the main branch.
I do still need to add capability to specify the module to write the series to, but this will make use of the get_module function from PR #156, and so I'll patch it in after both are merged.


Minor bugs in ImageNet training tutorial

Not sure if this is the correct place to point this out, but the ImageNet training tutorial seems to contain a few minor bugs. Fixing them might save people some time:
In ImageNet data preparation tutorial, I added these to extract_train of imagenet.py at lines 82-83:
if clas_tar.name == '.' or class_tar.name == '..':
    continue

Also, to extract the data that is directly usable in the training tutorial, user should run:
python imagenet.py --download-dir ~/ILSVRC2012 --with-rec

So call the script with --with-rec set since it's not set by default.
In ImageNet training tutorial:

a batch_size variable should be defined globally
lr_decay_period should be changed to lr_decay_count
loss = [L(yhat, y) for yhat, y in zip(outputs, label)] L should be changed to loss_fn
opt.log_interval should change to just log_interval

@youn123 Thank you for pointing this out
@mxnet-label-bot add [Gluon, Website]

This issue is not relating to MXNet website, remove "Website" label.
@mxnet-label-bot remove [Website]


Getting Exec format error while installing

Expected behavior
With the right installer 86_64 on 64 Ubuntu machine, I should be able to install Gauge.
Actual behavior
Getting cannot execute binary file: Exec format error
Steps to replicate
Previously I have installed Gauge using the sudo permission
sudo gauge -v
Gauge version: 0.8.1

Plugins
-------
html-report (3.1.0)

Now I am trying to install with the nightly. My Ubuntu is 64 bit and I am using the corresponding nightly.

$ unzip '/home/<username>/Downloads/gauge-0.8.2.nightly-2017-03-17-darwin.x86_64.zip'
Archive:  /home/<username>/Downloads/gauge-0.8.2.nightly-2017-03-17-darwin.x86_64.zip
   creating: bin/
  inflating: bin/gauge
  inflating: bin/gauge_screenshot
   creating: config/
  inflating: config/gauge.properties
  inflating: config/notice.md
   creating: config/skel/
   creating: config/skel/env/
  inflating: config/skel/env/default.properties
  inflating: config/skel/example.spec
  inflating: install.sh

Installing Gauge with no parameters. On my terminal I had entered the password previously, I think it may not be requesting the password. Furthermore I am getting the error Exec format error despite using the right exec
$ ./install.sh
Installing gauge at /usr/local/bin
Enter custom install location :-

You do not have write permissions for /usr/local
Running script as sudo
Installed gauge binaries at /usr/local
Creating /home/sswaroop/.gauge/config ...
The dir .gauge already exist but was created with eleveted permision.
Enter [1] to change permissions or Enter [2] to delete the dir (By default it will change the permissions)
2
GAUGE_ROOT has been set. If you face errors, run '$ source ~/.profile'

Gauge core successfully installed.

Enter comma(',') separated list of plugins which you would like to install :-

Installing plugin html-report ...
./install.sh: line 50: /usr/local/bin/gauge: cannot execute binary file: Exec format error

This is not an issue


Request

Here are some suggestions for new cool features you could add:

Contextual Reactions: Implement AI-driven contextual reactions based on message content, sentiment, or entities detected.

Reaction Chains: Allow users to create custom reaction chains, where the bot responds with a series of reactions in a specific order.

Example: A user sets up a chain of reactions like "😂 -> 👍 -> 💯" to respond to a specific message.

User-Specific Reactions: Store user preferences and react differently based on the user who sent the message.

Example: A user can set a custom reaction for a specific friend or group.

Reaction Statistics: Keep track of reaction usage and display statistics, such as most used reactions or reaction trends.

Example: /stats shows the top 5 most used reactions in the chat.

Custom Reaction Packs: Introduce custom reaction packs that users can create, share, and import.

Example: A user creates a reaction pack with custom emojis and shares it with friends.

Reaction Games: Develop interactive games or challenges that utilize reactions, such as "Reaction Race" or "Reaction Memory".

Example: Users compete to react with the correct emoji first in a "Reaction Race".

Multi-Step Reactions: Support multi-step reactions, where the bot responds with a series of reactions based on user input.

Example: A user sets up a multi-step reaction like "😂 -> (wait for user input) -> 👍".

Reaction Reminders: Offer users the ability to set reminders with custom reactions.

Example: A user sets a reminder with a custom reaction to wish a friend a happy birthday.

Customizable Reaction Triggers: Allow users to customize reaction triggers, such as reacting to specific keywords or hashtags.

Example: A user sets up a reaction to trigger when someone mentions "#TGBot".

Integration with Other Services: Integrate your bot with external services like Giphy or Tenor to fetch and react with relevant GIFs.

Example: A user sends a message, and the bot responds with a relevant GIF from Giphy.

Thank you so much bruh

Bro nhi Ho Rah Hai Chalu Bot

Hello, please use the new Deployment Methods for Heroku deployment.