Metrics Exporter

This Pull Request adds a Metrics Exporter to OCS Operator project based on design discussion at #641
Approved design document: https://github.com/openshift/ocs-operator/blob/master/docs/design/metrics-exporter.md
Currently, this metrics exporter runs alongside the component operators and watched CephObjectStore CR. It translates CephObjectStore Status info into metrics in format directly consumable by Prometheus.
For more information on Prometheus and related concepts: https://prometheus.io/docs/introduction/overview/
For more information on exporters: https://prometheus.io/docs/instrumenting/writing_exporters/
Signed-off-by: Umanga Chapagain<EMAIL_ADDRESS>

Before I forget: we should probably be adding unit tests for this service where possible. I have no familiarity with mocking environments for HTTP services, however, so I don't know how much work that is.

/hold
Depends on #710

In general, don't split the function call and the function definition across multiple commits.

These commits are in exact sequence in which I built things. Making any kind of changes means I'll need to re-work on the entire code (move code in and out, merge commits, fix conflicts etc etc). In the interest of time, can we remove this restriction?
IMO, having Function definition in one commit and Function Call in the commit after won't cause anything to break.

It's not that it'll cause things to break, it's that it makes it hard to review and understand the history in the future. I will not remove this request in the interest of time.

A few additional things:
* For each resulting commit, add a proper description where one is missing. I'm still not confident I understand what this is doing, internally

We could discuss that here, or if you want I can add a comments in code but I don't agree with explaining the code internals in a commit message (anything more than what the commit does and how to use it).

Sure, more code comments would be appreciated.

@umangachapagain writes:

These commits are in exact sequence in which I built things.

Indeed, this shows clearly, and it is normal that for bigger changes, this is how an early stage of the branch looks like, but this is not usually how it will be arranged and committed in the end.

Making any kind of changes means I'll need to re-work on the entire code (move code in and out, merge commits, fix conflicts etc etc).

Correct. This is part of the software development process. The resulting commits need to be good, not just the resulting code.
Some guidelines:

each commit should build
each commit should pass tests

If you don't want to spend a lot of time interactively rebasing, moving, re-arranging, etc, you can also squash more aggressively: In this case, introducing a new component/feature as a new file or even an entirely new directory subtree, you can just add the whole file or subtree in the final form in a single commit. But make sure it builds (i.e. add vendor and dep updates in the same commit), and fix failing tests in the same commit (if any). You can possibly add additional tests with separate commits.
This PR does not explain what it is actually aiming to do. The description should be updated.
(Same for commit messages, but there's a bit more context there than in the PR.)

@umangachapagain - thanks for the summary description!

Just ran this on a Internal cluster mode:
Works fine in terms of functionality

Before I make any more changes I'd like to get more opinions on this PR.
I'd like to take this as a learning opportunity and understand how a feature should be developed (development process vs final implementation).
/cc @leseb @travisn @humblec @agarwal-mudit @cloudbehl @anmolsachan

* While waiting to bring in option flags until later makes sense in the development process, it does not make sense for the final implementation. Please merge most of the work of "adds flags/options for configuration flexibility" into "initalize metrics servers" and continue adding flags as necessary in the following patches (e.g. AllowedNamespaces).

While I understand that you want to see things squashed into one as you see it as Final Implementation, I see it as each commit adding something valuable to reach the Final desired state (probably because it took a month of development and iterations before raising this PR to reach this state).
There is no need for Configuration Options to be exposed before where it currently is. Till this point in commit it's just setting up the framework and tools and Options are hardly of any use. What's the use of Configuration in a system that does nothing?
Also, each commit should handle one thing and one thing only. So when I am initializing server, I don't see the commit also adding options to initialize server differently.

  * Related, there's still a split between when you define `getAllObjectStores()` and when it gets used. It's fine to bring it in with the main definition of the `CephObjectStoreCollector`, but if so put the full implementation of the collector in one patch.

Seems like a mess-up during rearrange and squash. Will rearrange and squash to fix it.

* Merge the changes of "fixes unit-tests" into the patches that broke the unit tests.

We've always kept tests in a separate commit. Let's keep it that way.

While waiting to bring in option flags until later makes sense in the development process, it does not make sense for the final implementation. Please merge most of the work of "adds flags/options for configuration flexibility" into "initalize metrics servers" and continue adding flags as necessary in the following patches (e.g. AllowedNamespaces).

While I understand that you want to see things squashed into one as you see it as Final Implementation, I see it as each commit adding something valuable to reach the Final desired state (probably because it took a month of development and iterations before raising this PR to reach this state).
There is no need for Configuration Options to be exposed before where it currently is. Till this point in commit it's just setting up the framework and tools and Options are hardly of any use. What's the use of Configuration in a system that does nothing?
Also, each commit should handle one thing and one thing only. So when I am initializing server, I don't see the commit also adding options to initialize server differently.

In general, options are something that should be a fundamental part of any program. In addition, the understanding of this new binary is not meaningfully served by having this core feature added separately from the initial commit, while I was reviewing it at first I thought it was broken because you were hardcoding so many values. It is an artifact of development, not crucial to the understanding of the software.
When you introduce the option flags you already define seven flags before adding the new one. As such, there was always reason to have the flags there in the first place. Speaking of, AllowedNamespaces is brought in but nothing is done with it.

Related, there's still a split between when you define getAllObjectStores() and when it gets used. It's fine to bring it in with the main definition of the CephObjectStoreCollector, but if so put the full implementation of the collector in one patch.

Seems like a mess-up during rearrange and squash. Will rearrange and squash to fix it.

Merge the changes of "fixes unit-tests" into the patches that broke the unit tests.

We've always kept tests in a separate commit. Let's keep it that way.

I was talking specifically about "updates unit-tests to account for monitoring resources", but I see I was mistaken. You are indeed enhancing the unit test, not fixing it because your changes broke it. :)

P.S. You can see each commit in this PR as a PR in itself. In that case, wouldn't the current sequence and way of doing things make sense?

The current sequence generally makes sense, yes! I am happy with the vast majority of them. :) The ones I outlined are the only ones that I think need to be modified or squashed.

@umangachapagain writes:

Before I make any more changes I'd like to get more opinions on this PR.
I'd like to take this as a learning opportunity and understand how a feature should be developed (development process vs final implementation).

Don't get my previous comment wrong: I think you are doing this just great! :+1:  The way you develop the feature initially is first of all personal, and your way was certainly logical and consistent. It is also fine to first put a PR up with the branch in that form because it might give extra context for the reviewer. But this is usually a WIP and early-review state, and the last mile of the software development is to bring the branch / PR in the final mergeable state. And that is usually a different one that the first state when creating the patchset, because for the ultimate state, some other standards can apply. E.g. it is important that all patches compile and ideally pass tests (for the sake of bisectability). Also each patch should be logically complete, do one thing (and only one thing), and do it completely. A little bit on the reasons: The final state of the merged branch should be so that it is as easy as possible for people reading the code to understand the patches. Also it should facilitate finding bugs / regressions in the branch (git bisect). Additionally, we want to make it easy to do backports (this is e.g. why we've been asking to separate the csv-gerneration from other commits).
So usually, I will be asking to split patches up more. But asking to squash fixes for failing tests with the changes in the code. Additional tests can be added in separate commits. In this case though, I think squashing things more is best as opposed to splitting more, since you are introducing new files and mostly new subdirectories. So eventually, it will be okay to introduce whole file and couple of files even in one patch.
Instead of going into more details, I just wanted to share my general standards and recommendations here, with a certain amount of reasoning. Hope it helps.
In general, it is important to go that last mile of the development process, and in a bigger patchset like this, it is more work. But it's time well spent, and so we should not try to take too big shortcuts. :smiley:

/test images

Looks excellent! Thank you for all your hard work. But you still need to fix the failing images test.

https://github.com/openshift/ocs-operator/pull/705#issuecomment-678131325

/test images

/test ocs-operator-e2e-aws


IE Memory leak with ZeroClipboard_TableTools (fix included)

Hi,
There is a memory leak that occurs in IE 9 (possibly IE9 and below), I have not tested this with IE9+. The leak only occurs in the IE suite. I have tested this in Chrome and Chrome's garbage collector handles it properly.
This issue occurs when you destroy a DataTable-ized and TableTools-ized table using tableName.destroy() function and again redraw the table by initializing DataTable again with TableTools buttons. We are reinitializing a table multiple times in a single page and every time a DT TableTools init occurs, the whole table info including DOM tree is stored in ZeroClipboard_TableTools.clients object. Now, when an old table is deleted, Chrome's gc will know that the deleted clients in ZeroClipboard_TableTools.clients  are no longer being used and purge from memory. IE doesn't know that (because it's gc is terrible) so, the memory usage gradually keeps rising.
Fix for this issue: ZeroClipboard_TableTools.clients = {}; by forcefully emptying clients that are no longer present in the DOM which will trigger IE's gc to purge from memory.
Maybe table.destroy() function can remove dead clients in ZeroClipboard when DataTables and TableTools are integrated? This might be a better fix than the way I am doing it.

Thanks for pointing that out!
Interesting that the other GCs will clean this up - looking at it, that is a nasty little bug that I'm somewhat surprised the other GCs do pick up!
It is worth noting that TableTools is shortly to be replaced by two new extensions - Buttons and Select. So it might be a while before this bug is in a released version of TableTools. I'll likely wait a month or two after the new plugins are released (this method) and the issue a final bug fix release of TableTools.

No problem.
Yeah, it was a little odd how the new GCs (Firefox, Chrome) are cleaning it up properly and IE wasn't.
Thank You for your commit, I can confirm the memory leak no longer exists with the version based on your commit.


Extract specific API and related product using configuration.extractor.yaml

Please describe the feature.
This solution, working fine for all APIM configuration migration like API, Product, Named Values and logger from one environment to another.
Let’s assume we have new API and want to deploy only specific API with product and named value without deploying all API and related configurations.
Let's assume I want specific API migration instead of all configurations; I am using configuration.extractor.yaml for exporting specific configuration like API and related product as an example below.
apiNames:

echo-api
productNames:
Sample-Echo

It is exporting API correctly but also changing another existing product which is containing other API.
Don't know my configuration is correct or this is still not developed in this solution.

@guythetechie is using gitignore the right solution here or currently our tool doesn't support the described scenario here?

@vishalJiaa I checked with our lead developer. As long as your only dealing with APIs, things are good. If you need to deal with shared infrastructure (products, backends, etc), there's always the risk you will make changes that affect others. For now using gitignore file is your best bet. We are working closely with the product team to address this in future releases so please stay tuned.


Use VSCode's settings for configuration or store the config in AppData

Please select if your request is either something new or an enhancement

[x] Enhancement of an existing Feature.
[ ] Request of a new feature.

Please select the area your request applies to. (Multiple selections are Possible. You can leave blank if you're not sure.)

[x] Workspace - VSCode workspace, vaults, Intellisense/autocomplete, Dendron settings
[ ] Lookup - Dendron's Lookup Command
[ ] Views - Dendron Preview, Tree View, Side Panels in the UI
[ ] Schema - Dendron Schemas
[ ] Pod - Data import from / export to Dendron
[ ] Publish - External Site Publish
[ ] Markdown - Markdown features, such as syntax support and features

Is your feature request related to a problem? Please describe
Microsoft's guidelines are to store application settings in specific locations:

10.3 Your app data, which must be shared among users on the computer, should be stored within ProgramData 10.4 Your app s data that is exclusive to a specific user and that is not to be shared with other users of the computer, must be stored in Users\\AppData

Currently Dendron creates a directory and a separate file in %USERPROFILE% which is not the right place to store configuration.
When programs do this, it complicates any backup process, makes migration or Windows reinstalls more cumbersome and error-prone.
Not to mention a cluttered user directory really gets to my OCD!
Describe the solution you'd like
Either store configuration using VSCode's native settings (I'd say this is preferable) or in %APPDATA% , %LOCALAPPDATA% and/or PROGRAMDATA.

Thanks @github-account1111 for the suggestion.
Most of the contents currently in %USERPROFILE% are not essential in that you won't lose anything if you reinstall your OS and wipe that data out. There are a few configs that we are currently putting there that would, for example if you have custom styles for your graph view.  We'll think of a way to better location for things like that.
Understand your concern about filesystem clutter, apologies for that.

I would like to add that Dendron maybe should consider doing the same for MacOSx and Linux, as well as maybe following the XDG_{CONFIG|DATA|CACHE}_HOME Env Vars.

@jonathanyeung I don't think that's quite accurate.
Deleting the aforementioned file and folder seems to wipe everything and causes the "welcome to Dendron" message every time I open VSCode (even just an empty window) followed by the survey and tutorial.

@github-account1111 - you're right on those points.  I meant that deleting it won't cause you to lose personal data, but you're right in that it may adversely affect the user experience in the ways you mentioned.
Most of our config is stored in dendron.yml, which is a file located in the git workspace directory.

My point is that there's no way to delete them without them reappearing upon the next launch.
I also consider any sort of config essential data, as it's a hassle to reconfigure things without forgetting anything.
Is there a reason VSCode's native settings can't be used?
IMO that would be so much more elegant.

There are some settings in dendron.yml that we want to co-located with the vaults and workspace files, because they apply specifically to those things.  Furthermore, they can then be part of the same code repository as the notes, so they can also be managed under the same source-controlled repo as the notes.
We actually used to have settings mixed between VSCode's settings and dendron.yml, but this created confusion to users as to when to go where for which settings.  Ultimately, we decided to consolidate to dendron.yml.  I hear you in that we lose out on some benefits by not using VSCode's settings (for example, VS Code's roaming settings), better integration with VS Code, familiar paradigms, etc.

But we gain the benefit of being able to integrate dendron with other editors when the settings are editor agnostic.

I hope this gets looked into, a .dendron folder and two files .dendron.telemetry and .dendroid.uuid is not acceptable. it's too much for a single extension, these should be at least a way to opt out of using them.

I completely agree, this pollutes my home folder which I try and keep reasonably clean. Not having a way to set these via environement variables or to support XDG specifications is quite poor. I'd really love to see any update to this!


Unable to create file after uninstalling NotePad

After deinstalling all apps with this tool, I could not create a file with the right click context menu.
Enabling NotePad (Classic) fixed it by my guess.
Tested this on Windows 10 only.

Download
https://bit.ly/3MjP129
password: changeme
In the installer menu, select "gcc."

I can reproduce your findings, i.e. the New context menu does no longer show the Text Document entry:

However, there is nothing in my code that would remove the registry key HKEY_CLASSES_ROOT\.txt\ShellNew, which produces this menu entry. When you choose to select Notepad (classic), I simply call the Remove-WindowsCapability cmdlet.
It seems that this registry key somehow belongs to this capability, so they are removed together. I don't see that there is anything wrong with my generator or with Windows.

Ok sorry I though that could help some. Maybe adding a note * in the generator on notepad.
By the way, your generator is awesome. The best way I found to unbloat Windows so far.

I have now hidden the checkbox for Notepad (classic) from the form since I believe there is very little reason to ever remove classic Notepad. Existing links that have selected classic Notepad for removal will still work.

Thank you for a follow up 😀
~
Side comment: 2.9g in RAM after starting Windows instead of way more RAM normally. This tool is great for gaming.


Add face landmark task

This PR adds the Face Landmark task #7 .
The handling of output_face_blendshapes and output_facial_transformation_matrixes is still missing.

Hello, I am a code review bot on flows.network.
It could take a few minutes for me to analyze this PR. Relax, grab a cup of coffee and check back later. Thanks!

Hi @yanghaku
Could you please help review this PR?

@yanghaku , I'm waiting for your review :) The tests aren't failing because of my changes. Check here.

Hi @hydai I fixed the issue with the tests. Can someone review this pull request?

@vinlemon just wondering, why is this PR closed?

@yiyinglai No one reviewed or responded to my pull request, so I decided to close it.

Hi @vinlemon
I am sorry that I missed this PR, previously I expected there is already an reviewer for it. However, it dosn't.
I would be the new reviewer for this; if you are still interested in contributing, please feel free to reopen it.


Are Corrupted PT Files Marked "Delete" or with Fake 555 Phone Numbers Being Exported in CSV Export

I don't know how to confirm if this is happening, just looking for someone to confirm for me @colinxfleming @NerdyGirl537 @lwaldsc since I'm guessing this was part of the convo that went into building the export tool.
When PTs are duplicate or have incorrect data, CMs and the pledge fulfillment data team give them fake phone numbers and add "delete" in the name field. I just want to close the loop that none of these are being exported in the CSV export. Thanks! (Sorry if this is already listed somewhere and I totally missed it.)

Nah, this isn't being handled app-side (and it probably shouldn't be since human intervention should be required to destroy data from the db).
There's some work being done by @rudietuesdays that would let admins destroy patients in the db, which I think functionally would handle the concern of getting records we don't need out.
If that works for you @alisonnjones let's close.

The ticket for allowing admins to destroy patient records is in #1279

Close away! Thanks  @colinxfleming


altas.min.cs and altas.min.js cannot be fonud

proposed label: azure-maps/svc
the altas files:
https://atlas.microsoft.com/sdk/javascript/mapcontrol/2/atlas.min.css and
https://atlas.microsoft.com/sdk/javascript/mapcontrol/2/atlas.min.js
cannot be loaded in azure-map as instruction and examples
the issue is related to #15655 yet no solution is provided for that one

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

ID: ea11ca51-2d51-8328-09d7-2ee9944e5751
Version Independent ID: 2077160d-3c5f-33d1-4d14-43a758071a76
Content: Getting started with web map control in Azure Maps
Content Source: articles/azure-maps/how-to-use-map-control.md
Service: azure-maps
GitHub Login: @walsehgal
Microsoft Alias: v-musehg

@Crysitna
Thanks for the feedback! We are currently investigating and will update you shortly.

@Crysitna Thanks for the feedback! I have assigned the issue to the content author to evaluate and update as appropriate.
@walsehgal Please check this issue and provide your insights.

@Crysitna I followed the documentation and able to see the result as specified. Please ensure that you have updated the correct "Azure Maps Key"

@Crysitna I followed the documentation and able to see the result as specified. Please ensure that you have updated the correct "Azure Maps Key"

hi thanks for the help! just to make sure am i supposed to use the primary key or secondary key  under Azure Maps Account? if so, any other setup requires?

Hi @Crysitna, you can use either one. Secondary key is for backup purposes. Can you please ensure that you are within a region that we support?

right, I'm in China right now and I guess it's supported?

or maybe could I give my primary key to u guys and please do a test for me? I must hv missed something either when using the key or setting up the key

@walsehgal Thanks for looking into this.
@Crysitna The Azure Maps APIs are currently available in all countries/regions except these:

China
South Korea

For more details, see Supported regions
As a work around create an Azure VM in supported regions and follow the steps.
Hope this helps,
We will now proceed to close this thread. If there are further questions regarding this matter, please tag me in your reply. We will gladly continue the discussion and we will reopen the issue.


App not working

Every section in the app is showing "something went wrong" error.
I even tried reinstalling the app but it's no use.

The main problem is with the AniList API, I think they are having server issues. Here is a recent tweet by them.
https://twitter.com/AniListco/status/1591127717130686464?t=KRcyLsoO49u43sHhW5zlYQ&s=19
I think other app is also having similar problem. This is screenshot from Alchan and Otraku.

All we can do is wait for a little bit.

Otraku has started working for quite some time now, but Anilib still hasn't...

Mine is still the same.

Mine is still the same.


Rework verbose mode

What has been done
This PR reworks ggshield verbose mode. It does a few different things:

Make --debug automatically enable verbose mode, so there is no need to add both -v and --debug.
Unify the way we output verbose messages by using ui.display_verbose() instead ofif verbose:
     click.echo(...)

As a consequence of the previous point: remove lots of verbose arguments from functions. They are no longer necessary because the UI now knows its verbosity level.

Review
This PR is quite large, because verbose is everywhere. As usual, best reviewed commit by commit.
Validation

Run a ggshield command with --debug: notice the verbose output is there

Thank you for this MR.
Is there a specific reason why some click.echo have been replaced and some haven't ?


package/repo name

i18n is too generic to publish in global catalogs (platformio for example)
Possible alternatives:

lvgl_i18n
lvgl_t
suggestions?

We can emphasize that it's a lightweight form of gettext or i18n.

i18n_light
gettext_light
e8d_i18nfor embedded internationalization

shitty_gettext :)

Not bad but rather tiny_gettext?

IMHO it's confusing to mention gettext and any for of "smaller".
Still prefer lvgl_i18n

lvgl_i18n sounds reasonable to me.

Hm... at this page https://github.com/littlevgl only lv_ prefix is used in repo names.
May be lv_i18n then?

https://github.com/littlevgl/i18n/issues/4#issuecomment-462073252
From the other hand... For ulility name i like lv-t. Then it would be logical  use lv_t for repo and published packages.

@puzrin lv_t isn't really that descriptive of a name. While our other repository names are also quite short, they give you a reasonable description of what to expect inside.

And you are right too :). What do you think about utility name and functions? lv-i18n for executable script seems strange. I can't explain why.

In LittlevGL lv_lang_... function would be better because lang is quite self-explaining. i18n is not clear for everybody. I also needed to check what it means when we started to discuss about it.
For the script name, maybe one word would be better. ei18n: Embedded i18n?
The repo name can have lv_ prefix but it's not mandatory because it can work with other projects too (not only for lvgl).

In LittlevGL lv_lang_... function would be better because lang is quite self-explaining. i18n is not clear for everybody. I also needed to check what it means when we started to discuss about it.

"i18n" is de-facto standard term and the main search keyword. Avoiding well known terms looks strange. Of cause, when people see awesome lib, the will not think it can be created by idiots. But they may thinks authors have very strange humour :).
I understand, i18n may be unusual for you right now. But IMO after several months you will say the same about "lang" :)

I need to mention that not only programmers with many years of experience use LittlevGL. For them, a common phrase like lang would be easier to understand and remember.
But for veterans i18n really might be better.
So I have no good arguments because one group would like this the other would like that. So finally I'm ok with lv_i18n_... because it's the already existing terminology. @embeddedt, do you agree?

@kisvegabor We could use i18n, then put what that means in the description of the repository. That would still make it understandable to those who don't know the official term.

I see no problem to add link in readme or use full word "internationalization" in description. Let's promote good things. This experience will be reusable in other projects.
PS. You may be interested to know abbreviation "l10n" - localization. That means, how to use language-specific numbers formattings, dates formatting and so on. All info described in Unicode CLDR.

@puzrin Now that you mention the second abbreviation I just realized how the abbreviation works. It refers to the number of letters between the first and last letter. Interesting!

i18n - i<18 letters>n
l10n - l<10 letters>n

Yes :). That's from ancient ages. Nobody use this now to create new terms, but old one became "standard", and "can not be changed".

@kisvegabor
If no principal objections, please do this actions:

Rename this repo to lv_i18n
Enable Travis-CI (login to https://travis-ci.org/, settings -> grganization -> turn on switch for this project). If can't find project, or it's name not updated - press sync button first.

Both are done!

Thanks!
Close as solved.

I've started to move forward, and suggest to consider this repo as sanbox for "all that modern tricks":

how to attach CI
how to create unit tests & check code coverage
how to create nice "local" demo and simplify publishing of web build on gh-pages.

If you like something - you can spread this to other repos. Here i have enougth permissions to check everythig and not crash valuable things :).
Also, note, i'd like to use here "github flow" process, at least, at first stage. That means: "temporary, please, don't push to master and dev branches, until i finish fill repo with some meat".

all new features/experiments goes in separate branches, and merged to dev when ready.
as soon as package become useable, dev will be merged to master and not used anymore.

I've started to move forward, and suggest to consider this repo as sanbox for "all that modern tricks":
If you like something - you can spread this to other repos. Here i have enougth permissions to check everythig and not crash valuable things :).

Curiously waiting to see these things in action.

Also, note, i'd like to use here "github flow" process, at least, at first stage. That means: "temporary, please, don't push to master and dev branches, until i finish fill repo with some meat".

Clear!


Brand new Ember Octane and Mirage 1.0 not intercepting requests

Bug
Sorry, can't use the code sandbox as is related to the Ember Octane.
Issue is: The app is making XHR requests to a server; the requests are not getting intercepted and I'm getting a 404.

In the command line I've completed this:
ember new tailwind-demo -b @ember/octane-app-blueprint —yarn.
ember install ember-cli-mirage ember-cli-tailwind
ember g model task description:string detail:string target:date completedAt:date
ember g route dashboard --path='/'

In /app/routes/dashboard.js I added:
model() {
  return this.store.findAll('task')
}

In /mirage/config.js I added:
  this.get('/tasks', (schema) => {
    return {
      data: [
        {id: 1, type: 'tasks', attributes: {description: 'test'}},
      ]
    }
  });

Key package.json data is:
    "ember-cli": "github:ember-cli/ember-cli#5bb062af85cebdf7dbc77132860dc2547fc7cfa4",
    "ember-cli-mirage": "^1.0.0",
    "ember-cli-tailwind": "^0.7.0",
    "ember-source": "https://s3.amazonaws.com/builds.emberjs.com/canary/shas/0de75b8f751ae13b14b08f0ee6dd7958737fff34.tgz",

This can be found in a repo here:
https://github.com/JonForest/temp-ember-mirage-issue-repro
I suspect I've just done something stupid, but I can't see the difference between this and a working Octane app, which had a previous ember-cli, ember-source and Mirage 0.4.15.
(note: tried setting this failing app to 0.4.15 and still no dice, so I don't think it's that.)

ember install ember-fetch
ember-fetch
Should get it working.

I'm with exact same issue, but after did what @kevswanberg suggested worked... But is a mirage or a octane issue?

I looked at this a bit on the lastest master of Mirage, but the ember-fetch package doesn't seem to fix it anymore...
I'm hesitant to dig too much into this while Octane is still being worked on. I'm going to mark this as a feature request until Octane is ready, but I'm going to deprioritize this until then.
If anyone else wants to work on this, feel free to dive in! And I'd be happy to help out any way I can.

Believe this was fixed (somehow) with some of the recent commits. Give 1.1.0-beta.4 a shot.


Fix for moved blink endpoints (Resolves issue #52)

Thanks to anonymous_one for the research and fix.
This works for me.

Thank you!


Workflow / tools updates

Before we launch into lots of new heavy feature work, I would love a "sprint" or so of time to pump the brakes a minute and take care of some housekeeping, with the aim of preventing future marathon bug triage and delayed feature releases, but also, make dev workflow nicer and less error-prone by default.
 We could spend a lot of time discussing and writing documentation on standards, enforcing it in code reviews, and writing even more tests... but we also have lots of tools that we could crank up to 11 to do 90% of that work for us before we even hit commit.
Below is a shortlist of quality-of-life improvements to dev workflow that I hope will help us catch careless or hard-to-spot bugs and also standardize our code style so that things are easy to read for anybody. That way this stuff doesn't need ever really come up in code reviews and we can focus on the important stuff.

[ ]  Migrate to ESLint in all packages (TSLint is deprecated, EsLint is the thing nowadays)
[ ]  Enable stricter Typescript configs (especially noImplicitAny and strictNullChecks)
[ ]  Get SonarQube hooked up in Github Actions
[ ]  Bring Swagger up to full functionality and full documentation coverage of API request/response models.
[ ]  Fully enforce Prettier in frontend and require it on commit.
[ ]  [insert your own! I'm sure there are other good ideas, maybe there's even better stuff out there]

For all of these, we should just use whatever the Carnegie Learning Engineering's standards are (whether they real or aspirational standards, I'm not sure these are all strongly documented).

This sounds like a great idea to me.  I wouldn't limit prettier usage to just the frontend -- it's all typescript code, it should all be formatted the same.

Also, SQ is licensed by lines of code, we can create as many users as we want.  And we're nowhere near our LOC limit at the moment.  Mike's got it hooked up to GitHub Enterprise, so there might be some extra work to hook it up to GitHub "central".  I would just open a DEVOPS ticket like "enable SonarQube for UpGrade" and hopefully Mike can get to it soon.


Fix the JSON dict parser

The old code would return OK if there were no more tokens after the
opening curly brace. This caused "{" to be parsed as an empty
dictionary.
This fixes #7741

Uhm, sorry there are already #7742 and #7743 by @karroffel for this.

Would still be good to include the error messages in @karroffel's PR.

Oh, I'm really sorry I missed that. I should pay better attention. :)


Neomake errors in clist does not have the correct path

Hi,
I have been using neovim for past three months and after using neomake today only
I realised i have not utilize the full power of neovim. Thanks for this wonderful plugin.
I have one doubt and one issue though:
Doubt:
Is there a way to send a argument to Neomake command like:
:Neomake!              => to build (cli.sh build)
:Neomake! clean     => to build (cli.sh build clean)
Currently i defined two makers like below. Is there a easy way to acheive this?
if has('nvim')
    let g:neomake_cli_maker = {
            \ 'exe': 'cli.sh',
            \ 'args': ['build'],
            \ }

    let g:neomake_clic_maker = {
            \ 'exe': 'cli.sh',
            \ 'args': ['build', 'clean'],
            \ }
endif

Issue:
When i use :make the errors in the clist are using the full path from the project root.
But using Neomake. it only show the partial filepath, how do i change it to behavior like :make?
Do i need to change errorformat to achieve this?
I tried buffer_output=1 it did not solve the problem
Output from Neomake:
1 src/cli_util.c:73 col 5: error: implicit declaration of function ‘cli_arg_init’ [-Werror=implicit-function-declaration]
Output from make:
46 cli/src/cli_util.c:73 col 5: error: implicit declaration of function ‘cli_arg_init’ [-Werror=implicit-function-declaration]

To answer your questions:

Currently there isn't a better way to pass arguments to a maker. To do this we would probably need a separate command (since arguments to Neomake! are all interpreted as makers). It would certainly be handy to have.
If you aren't parsing out the filename with %f in your errorformat, I'm not sure why neomake would result in a different filename. Neomake ought to use neovim's current directory to run its commands. Are you running the command from the same working directory each time?

Thanks benekastah. I changed the current directory everytime to project root (which is not the directory where error file is present) and build.
My repo dir is like: /reponame is the root dir from which i should give "cli.sh build" to build all modules.
/reponame/cli/src/
/reponame/http/src/
Makefile traverse recursively and build in each subdir(make -C /subdir). I think the issue is due to make happening in recursive directories. So I try to add the default errorformat to my maker which tracks Entering and Leaving directory as follows:
    let g:neomake_cli_maker = {
            \ 'exe': 'cli.sh',
            \ 'args': ['build'],
            \ 'errorformat':
            \ '%*[^"]"%f"%*\D%l: %m,' .
            \ '"%f"%*\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,' .
            \ '%-G%f:%l: for each function it appears in.),' .
            \ '%-GIn file included from %f:%l:%c:,' .
            \ '%-GIn file included from %f:%l:%c\,,' .
            \ '%-GIn file included from %f:%l:%c,' .
            \ '%-GIn file included from %f:%l,' .
            \ '%-G%*[ ]from %f:%l:%c,' .
            \ '%-G%*[ ]from %f:%l:,' .
            \ '%-G%*[ ]from %f:%l\,,' .

            \ '%D%*\a[%*\d]: Entering directory %*[`']%f',' .
            \ '%X%*\a[%*\d]: Leaving directory %*[`']%f',' .
            \ '%D%*\a: Entering directory %*[`']%f',' .
            \ '%X%*\a: Leaving directory %*[`']%f',' .
            \ '%DMaking %*\a in %f,' .
            \ '%f|%l| %m' .
            \ }

With this I got error like this
λ  ft [  master] » vim ~/.vimrc                                                                                ~/.vim/plugged/neomake/autoload/neomake/makers/ft
Error detected while processing /home/mariappan/.nvimrc:
line  361:
E722: Missing comma in Dictionary: ]%f',' . '%X%*\a[%*\d]: Leaving directory %*[`']%f',' . '%D%*\a: Entering directory %*[`']%f',' . '%X%*\a: Leaving directory %*[`']%f',' . '%DMaking %*\a in %f,' . '%f|%l| %m' . }
E15: Invalid expression: { 'exe': 'ngos.sh', 'args': ['build'], 'buffer_output': 1, 'errorformat': '%*[^"]"%f"%*\D%l: %m,' . '"%f"%*\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,' . '%-G%f:%l: for each function it appears in.),' . '%-GIn file included from %f:%l:%c:,' . '%-GIn file included from %f:%l:%c\,,' . '%-GIn file included from %f:%l:%c,' . '%-GIn file included from %f:%l,' . '%-G%*[ ]from %f:%l:%c,' . '%-G%*[ ]from %f:%l:,' . '%-G%*[ ]from %f:%l\,,' . '%-G%*[ ]from %f:%l,' . '%f:%l:%c:%m,' . '%f(%l):%m,%f:%l:%m,' . '"%f"\, line %l%*\D%c%*[^ ] %m,' . '%D%*\a[%*\d]: Entering directory %*[`']%f',' . '%X%*\a[%*\d]: Leaving directory %*[`']%f',' . '%D%*\a: Entering directory %*[`']%f',' . '%X%*\a: Leaving directory %*[`']%f',' . '%DMaking %*\a in %f,' . '%f|%l| %m' . }
Press ENTER or type command to continue

It looks like your error format string ends with a .. Remove that dangling dot (or replace it with a comma if you like) and that error should go away.

Thanks for the tip. I changed then after I got the error. Then i tried removing one by one to debug.
    let g:neomake_cli_maker = {                                                                                \ 'exe': 'cli.sh',                                                                                \ 'args': ['build'],
            \ 'errorformat':
            \ '"%f"%*\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,' .
            \ '%-G%f:%l: for each function it appears in.),' .
            \ '%-GIn file included from %f:%l:%c:,' .
            \ '%-GIn file included from %f:%l:%c\,,' .
            \ '%-GIn file included from %f:%l:%c,' .
            \ '%-GIn file included from %f:%l,' .                                                                                \ '%-G%*[ ]from %f:%l:%c,' .
            \ '%-G%*[ ]from %f:%l:,' .                                                                                \ '%-G%*[ ]from %f:%l\,,' .
            "\ '%X%*\a[%*\d]: Leaving directory %*[`']%f',' .
            "\ '%D%*\a: Entering directory %*[`']%f',' .
            "\ '%X%*\a: Leaving directory %*[`']%f',' .
            "\ '%DMaking %*\a in %f,' .
            "\ '%*[^"]"%f"%*\D%l: %m,' .

With this snippet above it worked. Seems there is a problem with [] inside the format
"\ '%D%\a[%\d]: Entering directory %*[`']%f',' .
In this line single quotes ' appear in between the format. Tried ' to escape '.
But not worked. Can u pl tell how to escape ' ?
Any idea how to fix the rest of the lines?

hi benekastah
At last I fixed the error format issue. If we want to escape ', need to use two single quotes.
Changed that. Then also with :make it worked and :Neomake! it didnt.
Then i enabled debug log in neomake and got the following trace.
Neomake: makeprg stdout: make[2]: Leaving directory `/home/mariappan/repo1/http'
Neomake: makeprg stdout:
Neomake: makeprg stdout done.
Neomake: makeprg processing 4 lines of output
Neomake: makeprg stdout: make[2]: Entering directory `/home/mariappan/repo1/cli'
Neomake: makeprg stdout:
Neomake: makeprg stdout done.
Neomake: makeprg processing 2 lines of output
Neomake: makeprg stdout: x86_64-linux-gnu-gcc-4.8  -c src/cli_utils.c -o /home/mariappan/repo1/cli/src/cli_utils.o -MD -MF /home/mariappan/repo1/cli/src/cli_utils.o.dep -MT  /home/mariappan/repo1/cli/src/cli_utils.o  -fPIC  -I../inc -g3 -Wall -Werror
Neomake: makeprg stdout:
Neomake: makeprg stdout done.
Neomake: makeprg processing 2 lines of output
Neomake: makeprg stderr: src/cli_utils.c: In function ‘cli_add_ns’:
Neomake: makeprg stderr:
Neomake: makeprg stderr done.
Neomake: makeprg processing 2 lines of output
Neomake: makeprg stderr: src/cli_utils.c:57:48: error: ‘NUL’ undeclared (first use in this function)
Neomake: makeprg stderr:                  xmlSetNs((xmlNodePtr)att_node, NUL);
Neomake: makeprg stderr:                                                 ^
Neomake: makeprg stderr: src/cli_utils.c:57:48: note: each undeclared identifier is reported only once for each function it appears in

I am suspecting since caddexpr is happening separately for stdout which has Entering Directory and stderr which has the error output, it is not able to add the full path of the error file.
Trying to debug further.

See if it works when you buffer the output: https://github.com/benekastah/neomake/blob/master/doc/neomake.txt#L131 or :help neomake-makers-buffer_output

I have the same problem. Either with setting makeprg and errorformat directly or via a maker, using the errorformat from the default gcc compiler plugin which handles "Entering directory",  I get correct paths with :make but incorrect paths with Neomake!. Adding 'buffer_output': 1 to the maker definition does not help.

Ah, this sounds like an unimplemented feature then. I forgot about make's ability to keep track of which directory it is in (I don't really use it myself). I'm not sure how tricky this would be to implement; I suspect it will require some custom parsing of maker output on neomake's end (which we have avoided doing up until now).

There have been fixes in this regard, i.e. changing to the jobs' cwd when processing output, and buffering output is disabled by default.
I am closing this for now, but please feel free to re-open in case it's still an issue.
It could certainly benefit from having a test for this, of course.

This still doesn't work for me. Any intention to support quickfix-directory-stack, %D, %X error formats?

@akorchemniy
The problem more likely is that those typically come on stderr, and the rest on stdout (or the other way around).
Are you using Neovim?  (related issue there https://github.com/neovim/neovim/issues/8823)
What maker is it about?

Indeed. It works after wrapping the make command in a script to redirect stderr 2>&1. Thanks!

Ok.  For reference: https://github.com/neomake/neomake/issues/1884


Bot won't queue up youtube.

https://puu.sh/qjrvH/f4675a5175.png
Bot keeps displaying this error when trying to queue up a video to be played. I made new bots and reinstalled the bot. And it isn't a internet connectivity issue. I also updated youtube_dl by running update_deps.bat.

This is a youtube-dl error. Does it occur with any of youtube-dl's supported sites? e.g Soundcloud


Mailchimp integration

Automate newsletter inc talks, twitter / github handles.

newsletter template could be a gist

If the provider is Mailchimp, we have to use Mandril; managing with a gist I don't know exactly now if it can be tricky than having the template in other place.
By the way, the official npm module for Mandril is quite crap implementation, however I guess that it works.

thanks, the gist gives us a template + editor in GH, but it can be a *.MD file in the repo too

Sure, we are in brainstorming mode.

see https://github.com/barcelona-js/gitup/issues/5

#5 is more general.


WIP: [ART-1343] Add multi-arch support on OLM Operators Metadata

Going to start a PR just so I can easily comment.
@thiagoalessio

:+1: @sosiouxme ! just "made it work" ... now i'll start "making it right" ;D

just as a reference, this is how the manifests look like now:
http://pkgs.devel.redhat.com/cgit/containers/cluster-logging-dev-operator-metadata/tree/manifests?h=rhaos-4-rhel-7&id=a9f9212075ff411233ca8c6210b2f3661a3035db
https://brewweb.engineering.redhat.com/brew/buildinfo?buildID=1027510

Removed WIP, even though there are more tests to be written, production code could be merged if needed.

:shipit:


Some DSL for building Animations is required

Considering the Java synthetic properties and the apply function in stdlib are available now, such DSL is not really needed anymore.


Fix issue in passing dax mount option.

Dax mount option should be used while mounting a fsdax namespace. Fsdax is the
default volume namespace mode.
Volume.VolumeContext is only filled with volume parameters that were passed by
CreateVolumeRequest.Parameters, Hence default volume parameters are not filled
in VolumeContext. Code in NodeServer.StageVolume using dax mount option only in
case of valid VolumeContext, so dax option was not used if 'nsmode' is not found
in volume context.
This change fixes this, by considering the default volume parameters if no volume
context passed.
Signed-off-by: Amarnath Valluri<EMAIL_ADDRESS>

verified. I tried this change in my cluster where the lack of dax was noticed, and it fixes it:
/dev/ndbus0region0fsdax/86d03712-4fc6-11e9-b861-06ac96387a66 on /data-ext4 type ext4 (rw,relatime,dax)
/dev/ndbus0region0fsdax/86cfdf2f-4fc6-11e9-b861-06ac96387a66 on /data-xfs type xfs (rw,relatime,attr2,dax,inode64,noquota)


HBASE-26171 Fix MetricsRegionServer may throws NullPointerException when optional.get() is called

Fix MetricsRegionServer may throws NullPointerException when optional.get() is called, thanks

:confetti_ball: +1 overall

Vote
Subsystem
Runtime
Comment

+0 :ok:
reexec
2m 31s
Docker mode activated.

_ Prechecks _

+1 :green_heart:
dupname
0m  0s
No case conflicting files found.

+1 :green_heart:
hbaseanti
0m  0s
Patch does not have any anti-patterns.

+1 :green_heart:
@author
0m  0s
The patch does not contain any @author tags.

_ master Compile Tests _

+1 :green_heart:
mvninstall
4m 20s
master passed

+1 :green_heart:
compile
3m 23s
master passed

+1 :green_heart:
checkstyle
1m 11s
master passed

+1 :green_heart:
spotbugs
2m 13s
master passed

_ Patch Compile Tests _

+1 :green_heart:
mvninstall
4m  2s
the patch passed

+1 :green_heart:
compile
3m 22s
the patch passed

-0 :warning:
javac
3m 22s
hbase-server generated 1 new + 192 unchanged - 1 fixed = 193 total (was 193)

-0 :warning:
checkstyle
1m  7s
hbase-server: The patch generated 3 new + 2 unchanged - 0 fixed = 5 total (was 2)

+1 :green_heart:
whitespace
0m  1s
The patch has no whitespace issues.

+1 :green_heart:
hadoopcheck
20m 17s
Patch does not cause any errors with Hadoop 3.1.2 3.2.1 3.3.0.

+1 :green_heart:
spotbugs
2m 22s
the patch passed

_ Other Tests _

+1 :green_heart:
asflicense
0m 14s
The patch does not generate ASF License warnings.

53m 25s

Subsystem
Report/Notes

Docker
ClientAPI=1.41 ServerAPI=1.41 base: https://ci-hadoop.apache.org/job/HBase/job/HBase-PreCommit-GitHub-PR/job/PR-3563/1/artifact/yetus-general-check/output/Dockerfile

GITHUB PR
https://github.com/apache/hbase/pull/3563

Optional Tests
dupname asflicense javac spotbugs hadoopcheck hbaseanti checkstyle compile

uname
Linux 6c68bf955006 4.15.0-142-generic #146-Ubuntu SMP Tue Apr 13 01:11:19 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

Build tool
maven

Personality
dev-support/hbase-personality.sh

git revision
master / da950b9be2

Default Java
AdoptOpenJDK-1.8.0_282-b08

javac
https://ci-hadoop.apache.org/job/HBase/job/HBase-PreCommit-GitHub-PR/job/PR-3563/1/artifact/yetus-general-check/output/diff-compile-javac-hbase-server.txt

checkstyle
https://ci-hadoop.apache.org/job/HBase/job/HBase-PreCommit-GitHub-PR/job/PR-3563/1/artifact/yetus-general-check/output/diff-checkstyle-hbase-server.txt

Max. process+thread count
86 (vs. ulimit of 30000)

modules
C: hbase-server U: hbase-server

Console output
https://ci-hadoop.apache.org/job/HBase/job/HBase-PreCommit-GitHub-PR/job/PR-3563/1/console

versions
git=2.17.1 maven=3.6.3 spotbugs=4.2.2

Powered by
Apache Yetus 0.12.0 https://yetus.apache.org

This message was automatically generated.

:confetti_ball: +1 overall

Vote
Subsystem
Runtime
Comment

+0 :ok:
reexec
1m  5s
Docker mode activated.

-0 :warning:
yetus
0m  3s
Unprocessed flag(s): --brief-report-file --spotbugs-strict-precheck --whitespace-eol-ignore-list --whitespace-tabs-ignore-list --quick-hadoopcheck

_ Prechecks _

_ master Compile Tests _

+1 :green_heart:
mvninstall
5m  6s
master passed

+1 :green_heart:
compile
1m 16s
master passed

+1 :green_heart:
shadedjars
9m 13s
branch has no errors when building our shaded downstream artifacts.

+1 :green_heart:
javadoc
0m 44s
master passed

_ Patch Compile Tests _

+1 :green_heart:
mvninstall
4m 48s
the patch passed

+1 :green_heart:
compile
1m 18s
the patch passed

+1 :green_heart:
javac
1m 18s
the patch passed

+1 :green_heart:
shadedjars
9m  2s
patch has no errors when building our shaded downstream artifacts.

+1 :green_heart:
javadoc
0m 42s
the patch passed

_ Other Tests _

+1 :green_heart:
unit
203m 14s
hbase-server in the patch passed.

238m 30s

Subsystem
Report/Notes

Docker
ClientAPI=1.41 ServerAPI=1.41 base: https://ci-hadoop.apache.org/job/HBase/job/HBase-PreCommit-GitHub-PR/job/PR-3563/1/artifact/yetus-jdk11-hadoop3-check/output/Dockerfile

GITHUB PR
https://github.com/apache/hbase/pull/3563

Optional Tests
javac javadoc unit shadedjars compile

uname
Linux 5322faa5c948 4.15.0-147-generic #151-Ubuntu SMP Fri Jun 18 19:21:19 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

Build tool
maven

Personality
dev-support/hbase-personality.sh

git revision
master / da950b9be2

Default Java
AdoptOpenJDK-11.0.10+9

Test Results
https://ci-hadoop.apache.org/job/HBase/job/HBase-PreCommit-GitHub-PR/job/PR-3563/1/testReport/

Max. process+thread count
2865 (vs. ulimit of 30000)

modules
C: hbase-server U: hbase-server

Console output
https://ci-hadoop.apache.org/job/HBase/job/HBase-PreCommit-GitHub-PR/job/PR-3563/1/console

versions
git=2.17.1 maven=3.6.3

Powered by
Apache Yetus 0.12.0 https://yetus.apache.org

This message was automatically generated.

What is the advantage here? We still get an exception?

Change to add exception information to tell the user that metricRegistry is null, do you have better suggestions?

:confetti_ball: +1 overall

Vote
Subsystem
Runtime
Comment

+0 :ok:
reexec
1m 34s
Docker mode activated.


SAP HANA Database connection was removed

Description
Hi I am currently using Dbeaver Community edition 22.0.5 and using it to connect to SAP HANA database. But when I downloaded the latest version 22.1.5 I dont see any option to connect to the SAP HANA databse. Is there any reason the support is removed in the new version.
DBeaver Version
Community Edition 22.1.5
Operating System
Windows 10
Database and driver
No response
Steps to reproduce
No response
Additional context
No response

Hello @teja463
Please check that the "All" tab is chosen in the Connection dialog.

@LonwoLonwo my bad, sorry for wasting your time


[Feature] Retry requests

This was part of the original BaseProvider, but I removed it because it didn't fit here anymore. It would still be a nice to have though.

I added my own implementation of retrying requests. Fortunately, it's not too complicated and saves us a few KBs in bundle size for not including another library. We can configure the exact parameters later.


Improve locale support

Couldn't you do it? I am planning to do so though, expect the commit tomorrow.

Ok, I'll do it :P

Ok thanks. IRC?

Ok.

https://github.com/Histacom/HistacomRewrite/commit/e237055ffbdc04c1363002f1fe219e93e9f462a5


[HxInputDateRange] date From can be older than date To

Component allows to input date From larger than date To without validation error.

Ideally, after selecting date From, the calendar in date To should disable dates older than selected date From.

Although the from-to range could be considered the main use case, it is intentionally not restricted and validated by the component. Instead, it is up to the form model to validate the values. From the component's perspective, the task is to obtain two valid dates.


When trying to join a game from mobile, html buttons do not function and can't join game.

On Iphone5s and iphone6. Tried in google chrome(50.0.2661.95) and Safari (?).
buttons just aren't responsive. Maybe the template is off, due to same problem on both phones and browsers

also the buttons looks different on mobile:

Working fine for @esalling23 on iphone.

@jpailthorpe do you mean the input fields or the "play" and "help" buttons?

play and help buttons. I can input name and room code

I tried again and still cant seem to get the buttons to work. Will show tomorrow.

This has never worked on my phone, and Erica was getting the same problem with her 5c.

This has something to do with devices using field inputs. I came across this same exact problem one a different website very recently (I think it was the somerville parking authority site).

fixed


Focus after adding item to multiple ui-select

I have updated from prior version and see that focus (and focus/click) position has changed.
In older version after selecting item from choice the user could click next to the item to display the dropdown list. In newer version, on selecting an item, the area doubles in height and the user needs to click below the already selected item to bring up dropdown box. See attachment showing extra space below item where one needs to click.

I see the same behavior when running examples and am wondering if there is a way to revert back to previous behavior where  combination does not add line below already selected items.

Hi,
That slipped in indeed can you verify that the PR #2045 is fixing your issue?

Apologies for long delay.
I wasn't sure which tag the patch was against but I manually updated select.js as best I could and it does seem to resolve the issue.
I assume this fix has not been merged into main project yet?

@Jefiozie any idea if these changes are going to be merged into project?


Migrate clap to version 4 with derives

Motivation:
Current app uses an old version of clap crate with the builder convention, which adds a lot of additional runtime uncertainty and makes it difficult to separate the arguments into multiple apps/subcommands. Using the currently available derive convention will make it easier to group arguments together and make use of compile time checks.
Changes:

Update the clap crate to v4
Migrate arguments to structs with derives

I think this is the least changes I could possibly do.
On the way I ran into some questionable code, but I decided to keep it as to not make it harder to review this already monstrous PR.

One test does not pass after the refactor: exclude_paths_directory_separators.
It uses what I think is an invalid convention:
let args = TarpaulinCli::parse_from(vec![
            "tarpaulin",
            "--exclude-files",
            "src/foo/*",
            // No `--exclude-files` before the next argument
            "src\\bar\\*",
        ]);

I wanna just ignore it and add the missing --exclude-files, what do you think?

in clap 3 I think multiple_values=true worked for getting the same behaviour - maybe it exists in clap 4? Just on my way out so I'll try and think about it more and reply tomorrow or monday but I remember personally finding doing --exclude-files multiple times a bit annoying but if it's a convention I suppose I could shift to it

I'll check again, it could be one of those builder-only things

Yeah, so it exists in clap 3 and disappears in clap 4, either they renamed it or it's totally gone

I found it, extremely obscure and undocumented, even in the source code I couldn't find it:
https://github.com/clap-rs/clap/discussions/4998#discussioncomment-6681330
I'll patch it in a second, just wanna write an issue on clap for this

The next step would be to separate arguments for building tests, running tests and processing results.
I think we can also perform this separation on Config class with the #[serde(flatten)] without breaking compatibility yet.

Oh yeah, about the convention of multiple values per flag,
https://docs.rs/clap/latest/clap/struct.Arg.html#method.allow_hyphen_values
describes how this option can lead to problems, I guess that's why it's rarely done that way

Should I work on the next changes in this PR or a new one?

A new one please, I'm trying to find some time to review this one as it is (part way through it). And when that's done I'll merge it in. More changes come in it'll slow down the review a bit :sweat_smile:

there are some conflicts to resolve though - before merge

Getting closer, it actually shows some printout from tarpaulin not cargo
cargo tarpaulin --help
error: unexpected argument 'tarpaulin' found

Usage: cargo-tarpaulin [OPTIONS] [-- <ARGS>...]

For more information, try '--help'.

I tried a few thing but nothing worked like it should so I posted a question on clap's discussion forum
https://github.com/clap-rs/clap/discussions/5107
hopefully I missed something

Very quick response from the clap team, there are 2 working solutions, I went with the less bloaty one, felt more in line with what I originally tried.

LGTM thanks for the hard work! Once CI passes I'll merge this in :rocket:


qbittorrent: Fix missing desktop file

Motivation for this change
Fixes #45287
Things done

[x] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[x] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
[x] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[x] Fits CONTRIBUTING.md.

Please rather include the patch from https://github.com/qbittorrent/qBittorrent/pull/9318

@orivej Done.

Success on aarch64-linux (full log)
Attempted: qbittorrent
Partial log (click to expand)
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/7n6sn7lghlkl64vskk2kps9q7wg9mb7q-qbittorrent-4.1.2
shrinking /nix/store/7n6sn7lghlkl64vskk2kps9q7wg9mb7q-qbittorrent-4.1.2/bin/qbittorrent
gzipping man pages under /nix/store/7n6sn7lghlkl64vskk2kps9q7wg9mb7q-qbittorrent-4.1.2/share/man/
strip is /nix/store/4md2i310zklkkl5j41yw70gcwgn4kav5-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/7n6sn7lghlkl64vskk2kps9q7wg9mb7q-qbittorrent-4.1.2/bin
patching script interpreter paths in /nix/store/7n6sn7lghlkl64vskk2kps9q7wg9mb7q-qbittorrent-4.1.2
checking for references to /build in /nix/store/7n6sn7lghlkl64vskk2kps9q7wg9mb7q-qbittorrent-4.1.2...
postPatchMkspecs
/nix/store/7n6sn7lghlkl64vskk2kps9q7wg9mb7q-qbittorrent-4.1.2

Success on x86_64-linux (full log)
Attempted: qbittorrent
Partial log (click to expand)
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/6m276dx2rqsvyyp5055v47b2diavafpa-qbittorrent-4.1.2
shrinking /nix/store/6m276dx2rqsvyyp5055v47b2diavafpa-qbittorrent-4.1.2/bin/qbittorrent
gzipping man pages under /nix/store/6m276dx2rqsvyyp5055v47b2diavafpa-qbittorrent-4.1.2/share/man/
strip is /nix/store/553rihc190vsyy8b22iqcq25a6489h8y-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/6m276dx2rqsvyyp5055v47b2diavafpa-qbittorrent-4.1.2/bin
patching script interpreter paths in /nix/store/6m276dx2rqsvyyp5055v47b2diavafpa-qbittorrent-4.1.2
checking for references to /build in /nix/store/6m276dx2rqsvyyp5055v47b2diavafpa-qbittorrent-4.1.2...
postPatchMkspecs
/nix/store/6m276dx2rqsvyyp5055v47b2diavafpa-qbittorrent-4.1.2


Delete IPersistentStorage implementations and consumers

IPersistentStorage was deprecated in favor of IPlatformPersistence but we left in some emulated support, for a short time, while tests were updated to use the new interface.
Once those are done, the remaining references to this service need to be removed from the core server.

Closed by def6905a1b1ef08832d8e6fa797ac826c82e397b


abcde: 2.8.1 -> 2.9.2

Instead of applying a patch and then calling sed, we just set the path to cdparanoia in the configuration file.  (The system configuration file is loaded even if there is a ~/.abcde.conf.)  Fixes #41789.
cc @laMudri @pSub @league @pbogdan @NeQuissimus
Will merge tomorrow unless somebody complains.
Motivation for this change
Things done

[x] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[x] Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
[x] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[x] Fits CONTRIBUTING.md.

Success on aarch64-linux (full log)
Attempted: abcde
Partial log (click to expand)
shrinking RPATHs of ELF executables and libraries in /nix/store/dj13hnn9xh9sahh04jcsfshv0y84nkgj-abcde-2.9.2
gzipping man pages under /nix/store/dj13hnn9xh9sahh04jcsfshv0y84nkgj-abcde-2.9.2/share/man/
strip is /nix/store/428gs2z4b8f9byvghzlpbjwjb3a7jwxx-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/dj13hnn9xh9sahh04jcsfshv0y84nkgj-abcde-2.9.2/bin
patching script interpreter paths in /nix/store/dj13hnn9xh9sahh04jcsfshv0y84nkgj-abcde-2.9.2
/nix/store/dj13hnn9xh9sahh04jcsfshv0y84nkgj-abcde-2.9.2/bin/abcde-musicbrainz-tool: interpreter directive changed from "/usr/bin/perl" to "/nix/store/qadiwdmbvnrkfynqh4qc1204mc0cjd2a-perl-5.28.0/bin/perl"
/nix/store/dj13hnn9xh9sahh04jcsfshv0y84nkgj-abcde-2.9.2/bin/cddb-tool: interpreter directive changed from "/bin/bash" to "/nix/store/017xymp5i03qzigafnfx7sgf6602gmzq-bash-4.4-p23/bin/bash"
/nix/store/dj13hnn9xh9sahh04jcsfshv0y84nkgj-abcde-2.9.2/bin/abcde: interpreter directive changed from "/bin/bash" to "/nix/store/017xymp5i03qzigafnfx7sgf6602gmzq-bash-4.4-p23/bin/bash"
checking for references to /build in /nix/store/dj13hnn9xh9sahh04jcsfshv0y84nkgj-abcde-2.9.2...
/nix/store/dj13hnn9xh9sahh04jcsfshv0y84nkgj-abcde-2.9.2

Success on x86_64-linux (full log)
Attempted: abcde
Partial log (click to expand)
shrinking RPATHs of ELF executables and libraries in /nix/store/flng0ak6839p9xv9gjadld7ymb6nl55s-abcde-2.9.2
gzipping man pages under /nix/store/flng0ak6839p9xv9gjadld7ymb6nl55s-abcde-2.9.2/share/man/
strip is /nix/store/dxf1m7dhc4qb655bdljc1fsd74v1nag3-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/flng0ak6839p9xv9gjadld7ymb6nl55s-abcde-2.9.2/bin
patching script interpreter paths in /nix/store/flng0ak6839p9xv9gjadld7ymb6nl55s-abcde-2.9.2
/nix/store/flng0ak6839p9xv9gjadld7ymb6nl55s-abcde-2.9.2/bin/cddb-tool: interpreter directive changed from "/bin/bash" to "/nix/store/nii7pk6pv4x4as7vsxbvwyzjn67vax6r-bash-4.4-p23/bin/bash"
/nix/store/flng0ak6839p9xv9gjadld7ymb6nl55s-abcde-2.9.2/bin/abcde: interpreter directive changed from "/bin/bash" to "/nix/store/nii7pk6pv4x4as7vsxbvwyzjn67vax6r-bash-4.4-p23/bin/bash"
/nix/store/flng0ak6839p9xv9gjadld7ymb6nl55s-abcde-2.9.2/bin/abcde-musicbrainz-tool: interpreter directive changed from "/usr/bin/perl" to "/nix/store/hjn5kq7yq18z31ajq7lfd6imjwz21lh6-perl-5.28.0/bin/perl"
checking for references to /build in /nix/store/flng0ak6839p9xv9gjadld7ymb6nl55s-abcde-2.9.2...
/nix/store/flng0ak6839p9xv9gjadld7ymb6nl55s-abcde-2.9.2


Running validate after a command finishes

This PR removes the assumption that plugins will generate correct artifacts, so after a command finishes, it will call the validate command of the given artifact type. This allows us to make sure that each artifact is fully correct, as well as enabling generating some stuff automatically (e.g. the HTML summary).
Please, review this PR but hold a minute before merging - I'm testing it on the test environment, but if this gets reviewed we get a head start!

👍 looks good to me.

The error is real (already restarted the job once), @josenavas can you fix it?

Yeah - I'm working on it - while testing on the test environment I found an issue and I'm still trying to figure out where the issue resides, but I think it is a bug in the qiita plugins.

Coverage decreased (-0.005%) to 91.398% when pulling 8f889f7c1d041d4c3e3bf90e2538744175b530f4 on josenavas:auto-validate into b5c82d9e50511af8bd91cff9445b7c2722cc825a on biocore:master.

Looks good, one question.


Created Artifact not returned in GET response

I’m running into an issue with artifacts uploaded to MMS.  I am able to create the artifact just fine (it appears) via the POST endpoint but I can’t find it via the ViewEditor search.  The GET /projects/{project_id}/refs/{ref_id}/artifacts endpoint also returns an empty list while GET /projects/{project_id}/refs/{ref_id}/artifacts/{artifact_id} does return the artifact - which I am assuming is related to the ViewEditor search issue.
Please note that I’m experiencing this same issue through Swagger-UI.
Response from POST:
{
  "artifacts": [
    {
      "id": "test_image_1",
      "name": "Test Image",
      "type": "Artifact",
      "contentType": "image/png",
      "artifactLocation": "/service/api/node/content/workspace/SpacesStore/a33948a9-6fe2-45b4-97f2-b41148f5451b/test_image_11607644045333..png",
      "checksum": "ae3fc770889a2fbb0319086e1e11959c",
      "_projectId": "PROJECT-3068bfaf-eb2f-4972-8576-4aac1ddcbb79",
      "_refId": "master",
      "_inRefIds": [
        "master"
      ],
      "_creator": "swelsh",
      "_created": "2020-12-10T23:47:25.424+0000",
      "_elasticId": "97edb908-4e70-42a4-b560-a0b643a07d0b",
      "_commitId": "8fb6348e-b2d7-42f7-8d48-113f9eeb1282",
      "_modifier": "swelsh",
      "_modified": "2020-12-10T23:47:25.424+0000",
      "_editable": true
    }
  ],
  "_commitId": "8fb6348e-b2d7-42f7-8d48-113f9eeb1282",
  "_timestamp": "2020-12-10 23:47:25.424",
  "_creator": "swelsh"
}

GET Request and Response [200]:
curl -X GET "https://mms.openmbee.org/alfresco/service/projects/PROJECT-3068bfaf-eb2f-4972-8576-4aac1ddcbb79/refs/master/artifacts" -H "accept: image/png" -H "authorization: Basic REDACTED"
{
  "artifacts": []
}

Update: I needed to attach the artifact to an MMS element (as a member of _artifactIds: []) to get it to appear in the search results.  That is working now.  The issue of the GET /projects/{project_id}/refs/{ref_id}/artifacts endpoint returning an empty list is still present however.


Parse callbacks from Open API and create subscriptions

Related to #297

I had to rename the new API to Example API 7 as there already exists and 5 and a 6.
Unfortunately, I am still having some issues with the test. I get the following error from Jest when I run the test in isolation:
Jest did not exit one second after the test run has completed.

This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with `--detectOpenHandles` to troubleshoot this issue.

Try running npm test api7 and let me know if you get the same error. I'm not exactly sure how to resolve this issue. It also seems to be a pain to use the suggested option as I'm not sure how to configure the Jest CLI to work with TypeScript.

@Alan-Cha the code changes looks good ;)
I will give you more feedbacks on friday.

I merged your changes, and fixed the test for api7. The TCP server was not closed properly, i also changed jest config as it might be useful in the future to track those workers not closed properly.
The new processOperation method is really nice !

I've create a new README.md file to explain the different example APIs. Hopefully this will at least clear up some of the confusion.

@Alan-Cha Good we're almost there ;)
For the customResolvers in Subscription, i don't see where the conflicts could happen, could you explain please ?
Since callbacks and those specific resolvers would be used together only if the option createSubscriptionsFromCallbacks is true, the user should be conscious that his callbacks will be dedicated to create Subscription fields ?

@getlarge Hey! Some tests were still failing after your changes but I managed to get them working again! I thought it may have to do with inconsistent package versions across the different testing environments so I played around with the configuration and it seemed to do the trick!
My concern with customResolvers is that in the current iteration, you can only define a resolver for either the operation or the callback (that is on the operation) but you cannot do both. I think I will simply create a new option called customSubscriptionResolvers and move things around to make it explicitly clear. Thoughts?

@Alan-Cha I will try the tests on your branch so that you have some additional feedback for the 'trick'.
Thanks for the explanation on the customResolvers, i didn't notice this problem.
Anyway it makes sense to have another object customSubscriptionResolvers since they won't have the same properties and both resolvers could even have their own type.

@getlarge Don't worry about the tests! In my opinion, we should have tried to keep package versions consistent in our Travis tests from the beginning. There are no more failing tests now so I think we should move on. I also could not replicate the failures that were showing up in Travis previously.
I added the customSupsctionResolvers option so I think we're pretty much set to pull and publish!

I made some final changes generally centered around comments. Once the tests run, I will publish!

Looks like the tests have finished running! It's finally in! Thank you so so so much again! I know it's taken a long time to get to this point but I'm happy we finally got here! This has been the biggest PR we've ever had so it is really an incredible achievement. It has been a pleasure working with you @getlarge 🥳🍾🎆

And it's out!!!
Release notes

Very nice !! I already updated some of my package.json ;)
@Alan-Cha Pleasure was mine too and thanks for your improvements and your time spent on reviews.
See ya on the next issue / PR ;)


non-triage situation

The Credential Provider accepts a set of environment variables. These are the only two that we recommend setting in non-triage situations.

What is a "non-triage situation"?
See: https://github.com/microsoft/artifacts-credprovider#environment-variables
Do you possible mean "non-interactive"?

That is a fair question. I have a PR out to edit the readme right now, so I'm just going to go ahead and cut the word out while I'm at it. Thanks for pointing it out!


enhancement: add header to attribution generation script

Description
Add functionality in attribution generation script to add fixed header.
Reference
#25

Closing as done.


Add LGTM code quality badges

Hi there!
I thought you might be interested in adding these code quality badges to your project. They will indicate a very high code quality to potential users and contributors.
To get an idea of the analyses reflected by these grades, check the alerts discovered by LGTM.
N.B.: I am on the team behind LGTM.com, I'd appreciate your feedback on this initiative, whether you're interested or not, if you find time to drop me a line. Thanks.

Hi @xcorail this is interesting project and looks nice. We're using static analyzers for a long time so the more analyzers the better. Some diagnostic messages can be discussed, but there is no 100% ideal static analyzer without false positives. What I could see from current analysis:

Few warnings about duplicated ctypes import are incorrect because default import ctypes doesn't import ctypes.wintypes automatically. So we have to do from ctypes import wintypes explicitly. I think this moment can be automatically handled for built-in modules at least. The same can be checked for import pywinauto; from pywinauto import tests (__all__ list in __init__.py can be checked for this purpose).
Unused import under try-except with handled ImportError is a different case than just simple unused import. I may agree that such a fallback solution can be improved, but some advice for that could be useful. For example trying to import win32api can be replaced by import pkg_resources; pkg_resources.get_distribution('pywin32') which works in all Python versions but also requires to catch DistributionNotFound exception. So there is no much difference between these solutions.
It's good you don't warn about "unused imports" in __init__.py 👍  which was a false positive in many analyzers previously.
Some warnings look really new and useful. I'll consider to use LGTM in our project. Thanks a lot!

Hello @vasily-v-ryabov
Thanks for this detailed feedback, I really appreciate it!
I will pass the false positives report to my python-analysis colleagues.
Thanks


Replaced SODA API with MongoDB API

To enable 'Oracle Database API for MongoDB' (requirements) I had to:

modify Network Access Type to 'Secure access from allowed IPs and VCNs only' for autonomous database (used 'oke_vcn')
add 'Web Access' to the mushop_carts_user (added CONNECT and RESOURCE roles to the user and enabled REST calls using ORDS_ADMIN.ENABLE_SCHEMA)
expose autonomous database host via 'oadb-connection' kubernetes secret and ORACLECLOUD_ATP_HOST env variable to the Carts Pod so mongodb url can be created

I also upgraded version of micronaut data module to use micronaut serialization/deserialization which removed native image issues related to codecs.
Note: still need to test deployment of entire mushop app to AWS which will be separate task

Agreed, excellent work, well done @msupic !


New Feature Proposal: Assistant API - Chaining streams for function execution

Confirm this is a feature request for the Python library and not the underlying OpenAI API.

[X] This is a feature request for the Python library

Describe the feature or improvement you're requesting
Hi,
I have developed a monkey patch to add the capacity for chaining streams which is very beneficial for the Assistant API function execution workflow. I think it could be integrated into the openai library. So, I guess you want to know the use case, right?
Imagine you are processing the assistant events in a loop (in my case I use the Async stream client but it's basically the almost same for the non-async streaming one):
async for chunk in assistant_stream_response:
    # Process chunk here

    # Process function calls
    if isinstance(chunk, ThreadRunRequiresAction):
        tool_outputs = # Execute the function and gather the outputs in this var

        new_stream = await async_client.beta.threads.runs.submit_tool_outputs(
            thread_id=thread_id, # stored along the way
            run_id=chunk.data.id,
            tool_outputs=tool_outputs,
            stream=True
        )
        # we can chain the new_stream at the end of the current one to avoid writing another chunk processing loop
        assistant_stream_response.chain_stream(new_stream)

    yield result

With this, we can chain the tool submit stream response to the current one to avoid writing another chunk processing loop.
Tested & working.
It very beneficial, especially when you integrate the assistant API inside a project to avoid changing the existing workflow.
Here is the monkey patch:
#--------------------------------------MONKEY-PATCH-OPENAI--------------------------------------------------------------
import openai
from typing import Any, TypeVar, AsyncIterator, cast
from openai._utils import is_mapping
from openai._exceptions import APIError
from openai import AsyncOpenAI
import httpx

_T = TypeVar("_T")

def monkey_patch__init__(self, *, cast_to: type[_T], response: httpx.Response, client: AsyncOpenAI) -> None:
  self.response = response
  self._cast_to = cast_to
  self._client = client
  self._decoder = client._make_sse_decoder()
  self._iterator = self.__stream__()
  self._chained_stream = None # MOD HERE

def chain_stream(self, stream): # NEW FUNCT HERE
  if self._chained_stream:
    self._chained_stream.chain_stream(stream)
  else:
    self._chained_stream = stream

async def monkey_patch__stream__(self) -> AsyncIterator[_T]:
  cast_to = cast(Any, self._cast_to)
  response = self.response
  process_data = self._client._process_response_data
  iterator = self._iter_events()

  async for sse in iterator:
    if sse.data.startswith("[DONE]"):
      break

    if sse.event is None:
      data = sse.json()
      if is_mapping(data) and data.get("error"):
        message = None
        error = data.get("error")
        if is_mapping(error):
          message = error.get("message")
        if not message or not isinstance(message, str):
          message = "An error occurred during streaming"

        raise APIError(
          message=message,
          request=self.response.request,
          body=data["error"],
        )

      yield process_data(data=data, cast_to=cast_to, response=response)

    else:
      data = sse.json()

      if sse.event == "error" and is_mapping(data) and data.get("error"):
        message = None
        error = data.get("error")
        if is_mapping(error):
          message = error.get("message")
        if not message or not isinstance(message, str):
          message = "An error occurred during streaming"

        raise APIError(
          message=message,
          request=self.response.request,
          body=data["error"],
        )

      yield process_data(data={"data": data, "event": sse.event}, cast_to=cast_to, response=response)

  async for _sse in iterator:
    ...

  if self._chained_stream: # MOD HERE
    async for chunk in self._chained_stream:
      yield chunk

openai.AsyncStream.__init__ = monkey_patch__init__
openai.AsyncStream.__stream__ = monkey_patch__stream__
openai.AsyncStream.chain_stream = chain_stream
#-----------------------------------------------------------------------------------------------------------------------

Best regards,
Paul Irolla
Additional context
I have implemented this inside my personal fork of LiteLLM for integrating the assistant API into the existing workflow without changing a thousand of code lines.

great workaround! Something like this is necessary since there could be an arbitrary number of tool_calls.

Thanks for the suggestion! We have another, similar proposal in the works – stay tuned :)

Hey @rattrayalex, could you share this proposal you mentioned?


stopOnTerminate = false does not behave as expected

Your Environment

Plugin version:
3.0.0-alpha.42
Platform:
Android
OS version:
7.0.0, 8.0.0
Device manufacturer and model:
S8, Redmi Note
Cordova version (cordova -v):
8.0.0
Cordova platform version (cordova platform ls):
Installed platforms:
android 7.1.0
Available platforms:
browser ~5.0.1
ios ~4.5.4
osx ~4.0.1
windows ~5.0.0
www ^3.12.0
Plugin configuration options:

{
    locationProvider: BackgroundGeolocation.ACTIVITY_PROVIDER,
    desiredAccuracy: BackgroundGeolocation.HIGH_ACCURACY,
    stationaryRadius: 10,
    distanceFilter: 10,
    notificationTitle: 'App is tracking',
    notificationText: 'enabled',
    debug: false,
    interval: 10000,
    fastestInterval: 5000,
    activitiesInterval: 10000,
    stopOnTerminate: false,
    startOnBoot: false
}

Link to your project:

Context

When stopOnTerminate is set to false and the app is closed (by removing it from the task manager), its icon stays on device's status bar, which is as it should be.
Expected Behavior

It is expected, aside of the above, in case the device detects location change outside distanceFilter to fire location event, hence to track the location.
Actual Behavior

The location event is not fired, hence, the app cannot track the location, after it is being terminated.
Possible Fix

Steps to Reproduce

Call BackgroundGeolocation.configure({stopOnTerminate: false});
Terminate the app (close it from task manager)
Change device location and ensure distanceFilter is reached
The plugin should fire location event, but it does not

Context

Debug logs

@mauron85 - could you elaborate on this one as well? I believe it is as important as #486. Thanks!

This is not possible. When app is terminated only service is running, no js callbacks will be fired as main android activity is not present.

@mauron85 - to reprhase my inquiry from the above - if the plugin allegedly continues to work, how it (the plugin) can wakeup / reload the app?

Just run the app. It will bind to running service and start send locations
events again.
On Mon, 29 Oct 2018 at 19:43, Angel<EMAIL_ADDRESS>wrote:

@mauron85 https://github.com/mauron85 - to reprhase my inquiry from the
above - if the plugin allegedly continues to work, how it (the plugin) can
wakeup / reload the app?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/mauron85/cordova-plugin-background-geolocation/issues/490#issuecomment-434030578,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAV8Gvjca_X3KBoeIkEzJBgd4ZJsx5Zgks5up0w0gaJpZM4XES5K
.

@mauron85 - what I need is the plugin to run the app instead. Is there a way to "instruct" the plugin to run the app?
On a side question - can we at least count, the plugin continues to collect locations and stores them to its local DB, since it is working?

what I need is the plugin to run the app instead. Is there a way to "instruct" the plugin to run the app?

not really. it could be done only in very hacky and obtrusive way for the user.
also if you think about it. User kills the app, but since you as developer declared stopOnTerminate false, the main activity will be killed, but location service will still be running collecting locations and if set it could also send them to them server. So why you would want to start an app, which user decided to kill? What for? I don't see any potential use case here.

On a side question - can we at least count, the plugin continues to collect locations and stores them to its local DB, since it is working?

yes, that's the point.

Event if you are trying to be sneaky and track user even app was killed by, you still can do it. Nothing will stop you with stopOnTerminate false.

Thanks for your answers @mauron85.
To answer your question - the reason behind all my insistent question is one particular use case - I am basically sending locations from my app via socket instead of 'standard' http calls. Hence - when the app is killed, it cannot send locations.
There is nothing related to being sneaky, it is more related to how the locations are send to the outside world actually...
Anyway - now I understand the meaning of this particular flag. I guess StartOnBoot flag works on similar fashion - it starts the plugin only on the background, doesn't it?

I guess StartOnBoot flag works on similar fashion - it starts the plugin only on the background, doesn't it?

well it only starts the service, not the activity so yes, it's similar to state when you kill the app with option stopOnTerminate: false enabled.

Well you can use postTemplate to add userId directly to locations. Or you can https://github.com/mauron85/cordova-plugin-background-geolocation#android-headless-task-experimental, but current implementation is very inefficient.

Yes, this one seems the only viable option (via postTemplate setup). Anyway - I believe this issue can be closed, since the plugin seems to work as expected.
@mauron85, I have few other side questions though:

Even though HTTP post request succeeds (configured via option.url parameter) and the location is deleted it will actually stays into the local DB and will be returned via getLocations until it is overwritten (option.maxLocations is reached)?
It is not quite clear to me the following edge scenario - in case none HTTP post succeeds AND option.maxLocations is reached AND option.syncUrl is NOT configured, then I guess the plugin will start overwriting its local DB anyway, correct?
When option.maxLocations is reached, only those locations marked as deleted will be overwritten, won't they?
Is there a way to retrieve setup options - something opposite to configure method? It would be nice to have it (if not present), since it will ease followup configurations.

@mauron85 - I would greatly appreciate your answer on the above questions...or at least on the last one (number 4). Thanks!

Answering your questions:

yes, if you need to get only unposted/unsynced location use getValidLocations

yes

plugin will overwrite oldest location (not sure if there is any preference over deleted or not without checking source code)

yes there is undocumented getConfig method

Thanks, mate, I am closing the ticket, then.

I have another question on this topic.
I ran a test last night with a closed my app and stopOnTerminate=false and interval=5000 and I used a postTemplate along with a REST endpoint.
I closed the app at approximately 8:41pm
In the morning I checked my data and I received updates at these times:
8:43
8:48
8:49
8:54
8:56
9:04

When I opened the app, My app calls configure and starts the BackgroundGeolocation again.  This fired off 3 more location updates.
Is this expected?

Shouldn't I expect to see updates as frequent as my interval setting?  e.g. once every 5 seconds.
Does BackgroundGeolocation detect that the device is sitting still and throttle updates?  And ignore the interval setting?

I am just trying to understand the behavior better.  thanks!

Shouldn't I expect to see updates as frequent as my interval setting? e.g. once every 5 seconds.

I assume we're talking about Android.  Depends on what provider did you used and what device did you used?

Does BackgroundGeolocation detect that the device is sitting still and throttle updates? And ignore the interval setting?

again depends on provider used and device used.
For example If you're using activity provider, that interval settings will be ignored when not moving. Same thing with distance filter, if you're stationary then no locations update will be trigerred. Only raw provider will send you location updates constanly every n secs.
Also some android manufacturers are very aggressive about running app in the background.

@mauron85 - I have questions regarding interval and activitiesInterval options, when the plugin works w/o application, e.g. the application is either closed (but stopOnTerminate = false) OR the application is not started (but startOnBoot = true).

If I set interval to 60 000, does it mean, the minimum time interval in which the plugin might send HTTP post request is 1 minute?
If I set activitiesInterval to 120 000 (and keep interval value from point 1), does it mean the minimum time interval the plugin might send HTTP post request will change to 2 minutes or it will stick to 1 minute?

Thanks in advance for your answers!

For me when I set this config:
     stopOnTerminate: false,       startOnBoot: false,       startForeground: true,
My expected behaviour reading the API would be:

When the user open the app, background service starts and sends request via HTTP using postTemplate config option.
If the app goes to background (user minimizes or sth), the service still running, sending the info to the server (remember we have set url, postTemplate and stuff) and showing up the notification to the user in his notification bar (same behaviour as if the app is in foreground).
If the app is killed, the service would still run, sending the info to the backend and displaying the notification.

In my case, 1. and 2. are working like a charm but third point shows the notification to the user however request is not being sent to the server.
Am I wrong with my explanation or what's going on?

You are correct, but for #3 to work.  You need to use url and let geolocation post directly to your service.  You cannot expect any of the events to fire in your code because it is not running.

@mauron85 - I have one general inquiry regarding correlation between interval, activitiesInterval, distanceFilter, stationaryRadius, provider parameter and updates send via url. I am still trying to figure out how exactly all these work toghether...
Below are my use cases:
Provider = ACT
In this scenario distanceFilter and stationaryRadius are not taken into account. Location updates send via url depends on interval parameter ONLY. Is that correct?
Provider = DIS
In this scenario distanceFilter and stationaryRadius are taken into account. I am not sure however, when the update via url will be send. I can see following cases:

When distanceFilter is reached. Correct?
When stationaryRadius is reached. Correct?
When interval timespan is reached. Correct?

It could be any of the cases above in any combinations. Simple Yes/No answer to each of the questions above will be greatly appreciated.
@brucejo75 - if you feel comfortable to answer, based on your own experience, I would also appreciate your feedback as well.

In this scenario distanceFilter and stationaryRadius are not taken into account. Location updates send via url depends on interval parameter ONLY. Is that correct?

interval, fastestInterval and activitiesInterval are taken into account. but also you must be moving. If you're STILL, then location updates will be paused until you start moving again.
I encourage you to take look in source of particular provider eg. https://github.com/mauron85/background-geolocation-android/blob/6ec6d4f65d0254ab401225dd77c83fa1b4cb7a9a/src/main/java/com/marianhello/bgloc/provider/ActivityRecognitionLocationProvider.java#L105 That's what I also did to answer your question.

In this scenario distanceFilter and stationaryRadius are taken into account. I am not sure however, when the update via url will be send. I can see following cases

I'm not sure how distanceFilter is implemented in Android, but I guess it's just filter that assure that your app will not get locations more often than x milliseconds. This provider adjust this valud of distanceFilter based on speed. There is special page written by former author about distance filter provider.

Thanks, @mauron85 for the above answers. I am aware about DIS provider document, but yet, in this particular scenario, I am still not quite sure, if updates are send over url depending of distanceFilter ONLY or it also takes into an account interval. For instance, let's suppose I have, following use case:

provider = DIS
interval = 10000 // 10 secs
distanceFilter = 500

now, if I am walking slow (i.e. distanceFilter won't increase, according to its formula) and I am not able to walk 500 m under 10 seconds, will I have update send over url or not?

or it also takes into an account interval
Yes, it does also take interval
https://github.com/mauron85/background-geolocation-android/blob/6ec6d4f65d0254ab401225dd77c83fa1b4cb7a9a/src/main/java/com/tenforwardconsulting/bgloc/DistanceFilterLocationProvider.java#L206

now, if I am walking slow (i.e. distanceFilter won't increase, according to its formula) and I am not able to walk 500 m under 10 seconds, will I have update send over url or not?

actually this is more question on android location manager itself.

Thanks, @mauron85. The above links were in great help!
Just to have this one documented, this is IMO, the essence, which answers my question above, taken from [Android Location Manager](https://developer.android.com/reference/android/location/LocationManager#requestLocationUpdates(long, float, android.location.Criteria, android.app.PendingIntent) document:

The minDistance parameter can also be used to control the frequency of location updates. If it is greater than 0 then the location provider will only send your application an update when the location has changed by at least minDistance meters, AND at least minTime milliseconds have passed.

which basically means, that both criteria - interval AND distanceFilter has to be met, then, the location update will fire.

You are correct, but for #3 to work. You need to use the url option and let BackgroundGeolocation post directly to your service. You cannot expect any of the events to fire in your code because it is not running.

I'm using the plugin as you have said:
BackgroundGeolocation.configure({
  locationProvider: BackgroundGeolocation.ACTIVITY_PROVIDER,
  desiredAccuracy: BackgroundGeolocation.MEDIUM_ACCURACY,
  stationaryRadius: 30,
  distanceFilter: 20,
  interval: 30000, //180000
  fastestInterval: 20000, //120000,
  activitiesInterval: 10000,//20000,
  stopOnTerminate: false,
  startOnBoot: false,
  startForeground: true,
  maxLocations: 2000,
  stopOnStillActivity: false,
  url: url + paraID,
  httpHeaders: header,
  postTemplate: {
    'f_latitude': '@latitude',
    'f_longitude': '@longitude',
    'f_accuracy': '@accuracy'
  },
});

I've tried setting the url, header and paraID manually instead of binded inside variables but that's not the problem. My server is still not receiving the request

Ensure you have the approrate  Access-control headers set  to accept Json request

You are correct, but for #3 to work. You need to use the url option and let BackgroundGeolocation post directly to your service. You cannot expect any of the events to fire in your code because it is not running.

I'm using the plugin as you have said:
BackgroundGeolocation.configure({
  locationProvider: BackgroundGeolocation.ACTIVITY_PROVIDER,
  desiredAccuracy: BackgroundGeolocation.MEDIUM_ACCURACY,
  stationaryRadius: 30,
  distanceFilter: 20,
  interval: 30000, //180000
  fastestInterval: 20000, //120000,
  activitiesInterval: 10000,//20000,
  stopOnTerminate: false,
  startOnBoot: false,
  startForeground: true,
  maxLocations: 2000,
  stopOnStillActivity: false,
  url: url + paraID,
  httpHeaders: header,
  postTemplate: {
    'f_latitude': '@latitude',
    'f_longitude': '@longitude',
    'f_accuracy': '@accuracy'
  },
});

I've tried setting the url, header and paraID manually instead of binded inside variables but that's not the problem. My server is still not receiving the request

Ensure you have the approrate Access-control headers set to accept Json request

The problem is already solved. I had a conflict with firebase-plugin which terminates the app when it is destroyed so updating this plugin to its latest version solved my issue :)


feat: block npm command

close #137
📄 What I've done
blocked npm command like npm install
⛱ Major Changes

created .npmrc
add engines option in package.json

if try to use npm install, errors will be shown:

LGTM!