reverse proxy support inconsistent and undocumented

Dear developers,
thank you for working in stirling PDF. Unfortunately the support for reverse proxys is broken and undocumented. The following problems exist:

There is no documented way to set the server name and port of sPDF. It is unclear which headers are taken into account and how sPDF determines it's own server name. That results for example in wrong redirects as mentioned in #1113

URLs throughout the website are constructed inconsistently. Thus the url base settings are ignored sometimes (for example the apple-touch-icon and the favicon and the bootstrap icons)

It is possible to fix part of these problems with heavy header rewriting and mangling on the reverse proxy. Because the documentation is non-existent, that is a tiresome try-and-error method. I was able to fix problem 1 but not all of problem to with that approach.
That leads me to the conclusion, that the URL routing logic needs consolidation and especially all generated links in the web page need to calculate their values from that central routing information table, which keeps track of the site name(s), port, scheme and uripath.

Just to confirm is this in regards to Stirling-PDFs security?
I agree the URL redirecting has major issues on security jars side, Do you also mean non security?

Hello,
yes i refer to the non-security / non-login mode. I have an identity aware proxy in front who takes care of authentication and authorization.
I think the low-hanging fruit would be to fix the absolute paths in the templates such as these:
`

`
which obviously wont work with some non-root server path.

sure

just removing the / should solve that, just merged to develop

Sorry to dive in. Will that also fix reverse proxy in secure mode? I am using haproxy and it is unable to load at all presently.
When connecting I get the sign-in screen although the image does not display but entering credentials tells me the server cannot connect. Local mode is absolutely fine - thank you for this utility.

No sorry

ok thank you - I will try running insecure once the new image drops.

I would add 1 thing to the discussion. As far as I understand SpringBoot by default uses Tomcat which can either support HTTP/1 (current setup of Stirling-PDF app) or HTTP/2 communication, but not both at the same time. This limitation is causing troubles for some reverse proxies. Actually I am fighting with haproxy setup and can not force Stirling-PDF to work properly.
I would be very grateful if you could stop using Tomcat as HTTP backend and switch either to Netty or Undertow and enable support for both HTTP/1 and HTTP/2 (https://hackernoon.com/replacing-default-tomcat-server-with-jetty-or-undertow-in-spring-boot-3-a-guide).

Sorry to dive in. Will that also fix reverse proxy in secure mode? I am using haproxy and it is unable to load at all presently.
When connecting I get the sign-in screen although the image does not display but entering credentials tells me the server cannot connect. Local mode is absolutely fine - thank you for this utility.
You are doing something wrong, because definitely haproxy in my case can load/proxy properly Stirling-PDF via https/1.0. However whatever function of Stirling-PDF I use I usually end up with 404 NOT FOUND error.
When I open Docker-ized app directly, eg. http://dockerhost:8085 then everything works properly. Just I face problem when using Stirling-PDF behind haproxy. I do not fully understand what is going wrong.
I would appreciate some help and discussion here is possbile. Hope we can "fix" all problems. (I am running Stirling-PDF without "login-page protection". My Stirling-PDF site is simply protected outside Stirling-PDF app (using Authelia to protect site)).

Good callout, will switch to jetty in next update

Is there any way to force Stirling-PDF to run with HTTPS self signed cert?
there is a custom_settings.yml were you can input your own application settings to override spring ones, which as passing in ssl files etc, there are a few other issue tickets raised with examples around here

Hi @Frooodle,
I wanted to say big thank you for switching to Jetty. I am step away from enabling HTTP/2, but how I can actually do that now in simplest manner?
I tried few things but I was not successful (I will try more but wanted to consult you).
It would be great if app was running out of the box using http/1.1 and http2c connector or maybe (better) https/1.1 and h/2 with alpn (self-signed cert).
The best option for me would to run docker container with https and self signed cert.

can you try go to
config/custom_settings.yml and add
server.http2.enabled=true
and see if that works

Hello Anthony,

can you try go to config/custom_settings.yml and add server.http2.enabled=true and see if that works
It did not work for me, but maybe I did something wrong (I even repackaged application.properties.yml in app.jar in docker image too, but seen no improvement in logs I am afraid).
I will try more config options, but likely about weekend as I am relatively busy till Friday and have no time :(

I think that SSL config mentioned in other ticket does not work anymore, but I need to try more.
Here is also a helpful comment regarding HTTP2 server: https://github.com/jetty/jetty.project/issues/3204. I will try to pass more info during weekend.

Closing this request as initial issue was dealt with,
created #1500 for http2 support so make sure issue is not lost


use newest proforma schema, bump version to 0.8.0

closes #190

Many thanks and a nice to keep compatibility with ProFormA 2.0.
I prepared a small patch to re-include the tests you removed for ProFormA 2.0, so that we should notice if we break something there. What do you think: Should we include those?
Reinclude_specs_for_ProFromA_2_0.patch.zip

agreed, more is better


Allow specifying running flags/args/params in JSON-config file

license-report supports multiple flags/args/params, e.g. --only, --package, --output etc.
It would be great to consolidate all such configurations in one single JSON (e.g. license-report-config.json) and apply it with --config.
Currently, part of configurations can be done in JSON and part as flags/args/params only.
I would like to have all configurations in one single place.

That feature already exists, but is perhaps a little bit hidden in the documentation. In the readme just above the screenshots it says:
# set options with command line options and config file
license-report --output=csv --config license-report-config.json

You can put any option into a config file and use it like this:
license-report --config license-report-config.json

Options that are not part of the custom config file are taken from the command line or the default configuration.

Thanks, "output"="json" in JSON works.
But there is an option to specify in JSON file an output file, e.g. > ./src/license-report.json?

That feature already exists, but the documentation is not clear enough.

It would be great to arrange a JSON schema template for license-report via https://github.com/SchemaStore/schemastore

It would be great to arrange a JSON schema template for license-report via the schemastore project.

Feel free to do it yourself. The parameters in lib/config.js are all commented and the possibility of using a config file as command line parameter is a function of the package rc used to access the command line parameters.

But is there an option to specify in JSON file an output file, e.g. > ./src/license-report.json?

No, license-report uses the flexibility of using stdout by design. This way you can use redirecting, piping and more.

Feel free to do it yourself. The parameters in lib/config.js are all commented and the possibility of using a config file as command line parameter is a function of the package rc used to access the command line parameters.

OK, I'll check what can be done.

It would be great to arrange a JSON schema template for license-report via the schemastore project.

Feel free to do it yourself. The parameters in lib/config.js are all commented and the possibility of using a config file as command line parameter is a function of the package rc used to access the command line parameters.

I've prepared an initial version of the schema based on lib/config.js.
However, the build https://github.com/SchemaStore/schemastore/pull/1713 is failed although the schema it self is valid.
Please, have a look, perhaps I forgot something critical.
Thanks.

I have never used schema.org - so give me some time to familiarize with the topic. It is always good to get new inspirations - perhaps I can use it in my daily work too ....

It's a great resource containing and maintaining schemas for tones of different projects!

The new consolidated PR https://github.com/SchemaStore/schemastore/pull/1716 with the schema is ready to be deployed.
Inside:

schema
test cases for basic and full schema
schema meta-description in catalog.json

Notes:

it contains full specification according to config.js
auto-suggestion should work
fixed typo in escapeCsvFields property name (Filelds vs. Fields)

Hopefully, this schema will be deployed soon and we could enjoy license-report with JSON-schema validation!

Do you have any idea how to use it e.g. on vscode?

Do you have any idea how to use it e.g. on vscode?

VS Code should have an appropriate JSON configurations section in settings.json.
I would check:
// When enabled, JSON schemas can be fetched from http and https locations.
"json.schemaDownload.enable": true,

// Associate schemas to JSON files in the current project.
"json.schemas": [],

In json.schemas array a schema URL should be stored, e.g.:
"json.schemas": [
	"https://json.schemastore.org/eslintrc.json"
]

Reference: https://code.visualstudio.com/docs/getstarted/settings

It would be great to arrange a JSON schema template for license-report via the schemastore project.

Feel free to do it yourself. The parameters in lib/config.js are all commented and the possibility of using a config file as command line parameter is a function of the package rc used to access the command line parameters.

Done! The schema is available: https://json.schemastore.org/license-report-config.json

The schema is published.
The initial question is resolved.
The ticket is closed.


⚠ Slack has degraded performance

In 8b7e062, Slack (https://status.slack.com/api/v2.0.0/current) experienced degraded performance:

HTTP code: 200
Response time: 247 ms

Resolved: Slack performance has improved in a75103c.


Make card dimensions adaptable to all devices

Description of the modifications
The cards on the main pyansys page (https://docs.pyansys.com/version/stable/) are squished when viewed on a mobile phone (see attached). We could make it so it only shows two cards per row, and/or adjust the css to be flexible and adapt to the size of the device being used.

Useful links and references
https://docs.pyansys.com/version/stable/

Thanks for opening issue @klmcadams , @AlejandroFernandezLuces already mentioned this issue, and i am working on this.

@Revathyvenugopal162 When it is done, might be worth it to do some additional testing about other contents and pages. For instance, make sure that the dev guide is rendering properly and we did not downgraded any UI/UX part.

Testing on different devices might be difficult in terms of CI/CD. But we should explore this. I'm no expert on CSS but happy to learn

It is already doing with pydata, we do have an open issue to adapt tests, we are adding this with different devices when we are modifying with pydata, but for sphinx cards, they dont have customization, so we just have to adapt their tests only for the sphinx design, until they have some from their side.

Thank you for opening the issue, fixed with v1.0.5 and closing the issue.


ledger-tool v1.18.26 clears the snapshot folder

I understand that it most likely won't be fixed, but maybe, if there's another restart, it would be worth just specifying to use v2 of ledger-tool. Today's instructions in the first point require installing v1.18.26.

~/.local/share/solana/install/releases/1.18.26/solana-release/bin/agave-ledger-tool -l /mnt/disk2/ledger create-snapshot --incremental --snapshot-archive-path /mnt/disk3/validator/snapshots/ --incremental-snapshot-archive-path /mnt/disk3/validator/incremental_snapshots/ --hard-fork 296877183 --deactivate-feature-gate 7uZBkJXJ1HkuP6R3MJfZs7mLwymBcDbKdqbF51ZWLier tvcF6b1TRz353zKuhBjinZkKzjmihXmBAHJdjNYw1sQ decoMktMcnmiq6t3u7g5BfgcQu91nKZr6RvMYf9z1Jb --accounts /mnt/disk3/validator/accounts --accounts-hash-cache-path /mnt/disk3/validator/accounts_hash_cache/ -- 296877183

[2024-10-17T07:31:45.212969291Z INFO  agave_ledger_tool] agave-ledger-tool 1.18.26 (src:c2b35002; feat:3241752014, client:Agave)
[2024-10-17T07:31:45.213265258Z INFO  solana_ledger::blockstore] Maximum open file descriptors: 1000000
[2024-10-17T07:31:45.213267800Z INFO  solana_ledger::blockstore] Opening blockstore at "/mnt/disk2/ledger/rocksdb"
[2024-10-17T07:31:45.214032395Z INFO  solana_ledger::blockstore_db] Opening Rocks with secondary (read only) access at: "/mnt/disk2/ledger/rocksdb/solana-secondary". This secondary access could temporarily degrade other accesses, such as by agave-validator
[2024-10-17T07:31:47.445610303Z INFO  solana_ledger::blockstore_db] Rocks's automatic compactions are disabled due to Secondary access
[2024-10-17T07:31:47.445692893Z INFO  solana_ledger::blockstore] Opening blockstore done; blockstore open took 2.2s
[2024-10-17T07:31:47.445730744Z INFO  agave_ledger_tool] Creating incremental snapshot of slot 296877183 in /mnt/disk3/validator/incremental_snapshots/
[2024-10-17T07:31:47.447783553Z INFO  agave_ledger_tool::ledger_utils] Checking if another process currently holding Primary access to "/mnt/disk2/ledger"
[2024-10-17T07:31:47.447792608Z INFO  solana_ledger::blockstore] Maximum open file descriptors: 1000000
[2024-10-17T07:31:47.447794223Z INFO  solana_ledger::blockstore] Opening blockstore at "/mnt/disk2/ledger/rocksdb"
[2024-10-17T07:31:47.719879852Z INFO  solana_ledger::blockstore_db] Rocks's automatic compactions are disabled due to PrimaryForMaintenance access
[2024-10-17T07:31:47.719950749Z INFO  solana_ledger::blockstore] Opening blockstore done; blockstore open took 272ms
[2024-10-17T07:31:47.747083422Z INFO  agave_ledger_tool::ledger_utils] Cleaning contents of account path: /mnt/disk3/validator/accounts/run
[2024-10-17T07:31:47.747149118Z INFO  agave_ledger_tool::ledger_utils] Cleaning account paths took 67us
[2024-10-17T07:31:47.747183705Z INFO  agave_ledger_tool::ledger_utils] Cleaning contents of account snapshot paths: ["/mnt/disk3/validator/accounts/snapshot"]
[2024-10-17T07:31:47.747235627Z INFO  solana_ledger::bank_forks_utils] Initializing bank snapshots dir: /mnt/disk2/ledger/ledger_tool/snapshot
[2024-10-17T07:31:47.747249207Z INFO  solana_runtime::snapshot_bank_utils] Loading bank from full snapshot archive: /mnt/disk3/validator/snapshots/snapshot-296863173-82pXRtPWvfGPzkkFMgzEUZPvvmJPVMrXB7jtShndjpcR.tar.zst, and incremental snapshot archive: Some("/mnt/disk3/validator/incremental_snapshots/incremental-snapshot-296863173-296876393-2gZEWR4vWo6fnmth7LxvMHXaC1UYJAfK79LeM7esxdwn.tar.zst")
[2024-10-17T07:31:55.124310455Z INFO  solana_runtime::snapshot_utils::snapshot_storage_rebuilder] rebuilt storages for 249695/391142 slots with 0 collisions
[2024-10-17T07:31:57.125610279Z INFO  solana_runtime::snapshot_utils::snapshot_storage_rebuilder] rebuilt storages for 323472/391142 slots with 0 collisions
[2024-10-17T07:31:58.914078308Z INFO  solana_accounts_db::shared_buffer_reader] reading entire decompressed file took: 11166640 us, bytes:<PHONE_NUMBER>6, read_us: 11143925, waiting_for_buffer_us: 0, largest fetch: 11665408, error: Ok(0)
[2024-10-17T07:31:58.927255350Z INFO  solana_accounts_db::hardened_unpack] unpacked 97787 entries total
[2024-10-17T07:31:58.928138191Z INFO  solana_accounts_db::hardened_unpack] unpacked 97786 entries total
[2024-10-17T07:31:58.928225244Z INFO  solana_accounts_db::hardened_unpack] unpacked 97787 entries total
[2024-10-17T07:31:58.969247137Z INFO  solana_accounts_db::hardened_unpack] unpacked 97787 entries total
[2024-10-17T07:31:59.006004942Z INFO  solana_runtime::snapshot_utils] snapshot untar took 11.3s
[2024-10-17T07:31:59.656572444Z INFO  solana_accounts_db::shared_buffer_reader] reading entire decompressed file took: 648106 us, bytes:<PHONE_NUMBER>, read_us: 646539, waiting_for_buffer_us: 0, largest fetch: 8388608, error: Ok(0)
[2024-10-17T07:31:59.666058486Z INFO  solana_accounts_db::hardened_unpack] unpacked 3001 entries total
[2024-10-17T07:31:59.666053713Z INFO  solana_accounts_db::hardened_unpack] unpacked 3001 entries total
[2024-10-17T07:31:59.666066167Z INFO  solana_accounts_db::hardened_unpack] unpacked 3002 entries total
[2024-10-17T07:31:59.666064879Z INFO  solana_accounts_db::hardened_unpack] unpacked 3002 entries total
[2024-10-17T07:32:02.763201228Z INFO  solana_runtime::snapshot_utils] incremental snapshot untar took 3.8s
[2024-10-17T07:32:02.764875594Z INFO  solana_runtime::snapshot_utils] snapshot version: 1.2.0
[2024-10-17T07:32:02.764914556Z INFO  solana_runtime::snapshot_utils] snapshot version: 1.2.0
[2024-10-17T07:32:02.764932650Z INFO  solana_runtime::snapshot_bank_utils] Rebuilding bank from full snapshot /mnt/disk2/ledger/ledger_tool/snapshot/tmp-snapshot-archive-SRrRkd/snapshots/296863173/296863173 and incremental snapshot Some("/mnt/disk2/ledger/ledger_tool/snapshot/tmp-snapshot-archive-CQXApQ/snapshots/296876393/296876393")
[2024-10-17T07:32:08.518465791Z INFO  solana_accounts_db::accounts_db] Background account hasher has started
[2024-10-17T07:32:10.500210331Z INFO  solana_accounts_db::accounts_db] rent_collector: RentCollector { epoch: 700, epoch_schedule: EpochSchedule { slots_per_epoch: 432000, leader_schedule_slot_offset: 432000, warmup: true, first_normal_epoch: 14, first_normal_slot: 524256 }, slots_per_year: 78892314.984, rent: Rent { lamports_per_byte_year: 3480, exemption_threshold: 2.0, burn_percent: 100 } }
[2024-10-17T07:32:21.054549928Z INFO  solana_accounts_db::accounts_db] accounts data len:<PHONE_NUMBER>3
[2024-10-17T07:32:23.074823189Z INFO  solana_runtime::bank] Rebuilding skipped rewrites of 183 accounts took 416us
[2024-10-17T07:32:23.117157846Z INFO  solana_runtime::serde_snapshot] rent_collector: RentCollector { epoch: 700, epoch_schedule: EpochSchedule { slots_per_epoch: 432000, leader_schedule_slot_offset: 432000, warmup: true, first_normal_epoch: 14, first_normal_slot: 524256 }, slots_per_year: 78892314.984, rent: Rent { lamports_per_byte_year: 3480, exemption_threshold: 2.0, burn_percent: 50 } }
[2024-10-17T07:32:23.117192241Z INFO  solana_runtime::snapshot_bank_utils] Rebuilding status cache from /mnt/disk2/ledger/ledger_tool/snapshot/tmp-snapshot-archive-CQXApQ/snapshots/status_cache
[2024-10-17T07:32:23.534961814Z INFO  solana_runtime::snapshot_bank_utils] Rebuilt bank for slot: 296876393
[2024-10-17T07:32:23.540056003Z INFO  solana_runtime::snapshot_bank_utils] rebuild bank from snapshots took 20.8s
[2024-10-17T07:32:23.540066412Z INFO  solana_runtime::bank] Cleaning... Skipped.
[2024-10-17T07:32:23.540067935Z INFO  solana_runtime::bank] Shrinking... Skipped.
[2024-10-17T07:32:23.540068889Z INFO  solana_runtime::bank] Verifying accounts...
[2024-10-17T07:32:23.540097608Z INFO  solana_runtime::bank] Verifying accounts... In background.
[2024-10-17T07:32:23.540098866Z INFO  solana_runtime::bank] Verifying bank...
[2024-10-17T07:32:23.540250902Z INFO  solana_runtime::bank] Initial background accounts hash verification has started
[2024-10-17T07:32:23.540542120Z INFO  solana_accounts_db::accounts_db] skipped rewrite hashes 296876393 0
[2024-10-17T07:32:23.540908681Z INFO  solana_runtime::bank] bank frozen: 296876393 hash: AFic2vE3Y8y9L3wKahKQ2B6jhMg3PRychDFkMgeqroJT accounts_delta: EmBKnbJjhj7xxFrHF7UxL3AqVmP7z58NswkBVyzdccZL signature_count: 1670 last_blockhash: FF2aEZqshZmUg9HXgJJFVD8N2QwL5QNL5yGGCYwQ8341 capitalization:<PHONE_NUMBER>709713878, stats: BankHashStats { num_updated_accounts: 3524, num_removed_accounts: 0, num_lamports_stored:<PHONE_NUMBER>65282086, total_data_len: 6451233, num_executable_accounts: 0 }
[2024-10-17T07:32:23.540939930Z INFO  solana_runtime::bank] Verifying bank... Done.
[2024-10-17T07:32:23.822112196Z INFO  agave_ledger_tool::ledger_utils] Using: block-verification-method: blockstore-processor
[2024-10-17T07:32:23.822122702Z INFO  agave_ledger_tool::ledger_utils] no scheduler pool is installed for block verification...
[2024-10-17T07:32:23.822639264Z INFO  solana_ledger::blockstore_processor] Processing ledger from slot 296876393...
[2024-10-17T07:32:23.822642986Z INFO  solana_ledger::blockstore_processor] Start slot 296876393 isn't a root, and won't be updated due to secondary blockstore access

...

[2024-10-17T07:33:36.250531209Z INFO  solana_runtime::bank] bank frozen: 296877184 hash: ABuvd5grMYhbrjeLmu3qCNqiD8DaDRw6oyboMgZfaQS5 accounts_delta: 4wcq3JUGR3HjPS78hXYheRWijVP1XmEDDW5FupsGMzSV signature_count: 0 last_blockhash: 5Jq6NhSQCWgh9GhMZJ3aJJhdZdALBoX2NWjqDUrh8VK5 capitalization:<PHONE_NUMBER>526144441, stats: BankHashStats { num_updated_accounts: 184, num_removed_accounts: 3, num_lamports_stored:<PHONE_NUMBER>3, total_data_len: 170571, num_executable_accounts: 0 }
[2024-10-17T07:33:36.275312103Z INFO  solana_runtime::snapshot_bank_utils] Creating bank snapshot for slot 296877184, path: /mnt/disk2/ledger/.tmpPq3nES/296877184/296877184.pre
[2024-10-17T07:33:39.733868678Z INFO  solana_runtime::snapshot_bank_utils] bank serialize took 3.3s for slot 296877184 at /mnt/disk2/ledger/.tmpPq3nES/296877184/296877184.pre
[2024-10-17T07:33:39.734653596Z INFO  solana_runtime::snapshot_package] Package snapshot for bank 296877184 has 12555 account storage entries (snapshot kind: IncrementalSnapshot(296863173))
[2024-10-17T07:33:44.018628081Z INFO  solana_runtime::snapshot_utils] Generating snapshot archive for slot 296877184
[2024-10-17T07:33:47.682400135Z INFO  solana_runtime::snapshot_utils] Purging old full snapshot archives in /mnt/disk3/validator/incremental_snapshots/, retaining up to<PHONE_NUMBER>3709551615 full snapshots
[2024-10-17T07:33:47.686223564Z INFO  solana_runtime::snapshot_utils] Purging old incremental snapshot archives in /mnt/disk3/validator/incremental_snapshots/, retaining up to<PHONE_NUMBER>3709551615 incremental snapshots
[2024-10-17T07:33:47.714001474Z INFO  solana_runtime::snapshot_utils] Successfully created /mnt/disk3/validator/incremental_snapshots/incremental-snapshot-296863173-296877184-8EQhtn3ZghtLpmZgwhFyH6USAyAr3hwWNszZNcwe7zUc.tar.zst. slot: 296877184, elapsed ms: 3695, size: 369360216
Successfully created incremental snapshot for slot 296877184, hash ABuvd5grMYhbrjeLmu3qCNqiD8DaDRw6oyboMgZfaQS5, base slot: 296863173: /mnt/disk3/validator/incremental_snapshots/incremental-snapshot-296863173-296877184-8EQhtn3ZghtLpmZgwhFyH6USAyAr3hwWNszZNcwe7zUc.tar.zst
Shred version: 27799
[2024-10-17T07:33:47.783915459Z INFO  solana_runtime::accounts_background_service] bank DropCallback signal queue disconnected.
[2024-10-17T07:33:47.833827007Z INFO  agave_ledger_tool] ledger tool took 122.6s

After that, the incremental_snapshots folder contains only the snapshot directory. Before running ledger-tool, it had 4 incremental snapshots.
v2 worked fine; I only added the capitalization flag

Hmm, we specifically made it such that ledger-tool should NOT be destructive; note these logs that say we'll retain 2^64 - 1:
[2024-10-17T07:33:47.682400135Z ...] Purging old full snapshot archives in /mnt/disk3/validator/incremental_snapshots/, retaining up to<PHONE_NUMBER>3709551615 full snapshots
[2024-10-17T07:33:47.686223564Z ...] Purging old incremental snapshot archives in /mnt/disk3/validator/incremental_snapshots/, retaining up to<PHONE_NUMBER>3709551615 incremental snapshots

v2 worked fine; I only added the capitalization flag

To confirm, you're saying that v2.0 did not clear the other incrementals when you made the restart snap, but v1.18 did clear the others for this latest attempt ?

I'm going to close this one out since MNB has advanced to v2.0. Feel free to open an new issue if you're able to reproduce anything with newer versions


[Feature] flink multi version runtime dependency isolation

Feature Request
flink multi version dependency isolation

flink multi version dependency isolation(flink 1.11+),better adaptation hadoop-yarn and k8s

flink 1.14 support.

多版本flink运行时依赖隔离,更好的自适应on yarn和 on k8s
flink 1.14 支持

cc @Al-assad
At present, a new branch "deployment onyarn", has been opened. In this branch, the isolation of runtime dependencies of different versions of Flink has been temporarily solved. The general methods are as follows:

In streamx-flink-shims, all the related dependencies of flink (flink-core, flink-yarn, etc.) shaded into fat jar

In other modules such as flink-submit, the maven "scpoe" that the relevant flink dependencies is "provided" and will not be printed into the final package

In a word, there is a special module that contains the dependency package of a specific version of flink, but other modules do not. The advantage of this is that it can simply and roughly solve the dependency problem of different versions of flink in the on-yarn mode. The problem is that the fatjar volume of the shims package is relatively large. The dependency management is relatively chaotic and unfriendly to the k8s-mode. We have to see how to do this in the k8s mode, Make on yarn and on k8s reach a balanced state and make them stable and available

目前开启了一个新的分支deployment-onyarn,在这个分支里,暂时解决了不同版本flink运行时依赖的隔离,实现方式如下:

在streamx-flink-shims中 引入了任务发布时(on yarn)需要的所有flink的相关依赖(flink-core,flink-yarn 等...) shadded到fat jar中
其他模块如flink-submit等中相关flink依赖的scpoe均为 provided,不会打到最终的包里.

总而言之专门有一个模块(shims),包含特定版本flink的依赖包,其他模块不包含, 这样做的好处是可以简单粗暴的解决on-yarn模式下flink不同版本的依赖问题.带来的问题是:shims包的fatjar体积比较大. 依赖的管理相对来说比较混乱,对k8s模式下不友好.这块还得看看在k8s下如何进行,使得on yarn和on k8s达到一个平衡的状态,使其稳定可用.


Multi-line message should keep timestamp of first line

If multiple lines are concatenated, the resulting event should have the timestamp of the first event in that list, not the last. Similarly, if an event is emitted due to timeout, it should carry the timestamp of the first element, not the time at which the timeout occurred.

Why do you think so?
Could you describe the reason?

For multi-line log entries, often the only line that contains an embedded timestamp is the first one. (Indeed, often the way I parse things is by assuming that anything that starts with a timestamp is a new log entry, and anything that doesn't is a continuation). This means that the only line that has the correct timestamp is the first one - the rest have the timestamp of when they were read in, which might not be the same one.
For timeouts, it's even simple: A line comes in at 12:00:00. It gets processed, held, and after X seconds the timeout expires and it gets sent on. It now carries a timestamp of 12:00:X. This timestamp is wrong; the log entry happened at 12:00:00.

Thank you for describing reason.
I will work for this issue in next week.


printf %a formatting just generates an "a"

The C99 option of "%a" formatting for floating point numbers is just generating an "a", so, i guess, is not being recognised as a formatting option.
I've just tested this on:

Debian 11.5 (fresh build in a VM);
used the pico-setup.sh configuration script;
tweaked the serial hello-world example to printf("Hello, world! %a\n", 0.1);
rebuild and load onto a fresh PicoW (using uf2 image);
outputs "Hello, world! a".

This may be something to do with Marco Paland's printf, which doesn't appear to support the %a option.  However, I've had no success if I tweak the build system to use arm-none-eabi-newlib (v3.3.0).
Or perhaps I am missing something?

depends what you tried!
pico_set_printf_implementation(your_target compiler)

Thanks @kilograham for the suggestion, but despite 30 years as a professional software engineer with half being in embedded systems, CMake still confuses me.  I couldn't see how to use pico_set_printf_implementation to force the system to use the newlib printf, so I resorted to butchery ;-).

In the sdk I removed directories pico_printf, pico_stdio, pico_stdio_semihosting, pico_stdio_uart, pico_stdio_usb from src/rp2_common;
I patched the CMake errors (commenting out lines in rp2_common/CMakeLists.txt and rp2_common/pcio_runtime/CMakeLists.txt that referred to the missing directories);
My test project C source is just int main() { printf("%a\n", 0.1); };
My test project CMakeList.txt does not use pico_enable_stdio_ and merely has target_link_libraries(test pico_runtime);
I added the necessary libgloss function, most trivially returning an error, but also with a simple _write to send the bytes through uart0;
Stepping through the program execution, I can see that it is using newlib's printf.

The result is that it still ignores the %a formatting!  Further investigation suggests that the default build of newlib does not include C99 IO formatting options.  It needs to be configured with --enable-newlib-io-c99-formats to add %a formatting.
I guess the real problem is that there is insufficient interest in the %a feature to make folk demand it (at the expense of more code).  My interest comes from my attempt to port Lua (which by default does use %a) to the Pico.  However, it also looks like Lua source has a way to work around this, so maybe I'll tackle it there...
For what its worth, if you think that this "issue" serves no purpose, I am content to see it closed.  Cheers.

Aside: running the Lua testsuite has just thrown another oddity - 0.0f / 0.0f on the Pico (with a fresh, unbutcherred SDK) is returning INFINITY rather than NAN.  I can raise this as a distinct issue if you want, or it might not be worth further consideration.

Just to confirm after testing, and for posterity:

Setting pico_set_printf_implementation(your_target compiler) fixes the issue (i.e. %a becomes available), but only if newlib is built with --enable-newlib-io-c99-formats.
The alternative for Lua is to undefine lua_number2strx in luaconf.h.

Hi @rblank,
You are right that Lua's configuration uses the function lua_number2strx to convert a float to a hexadecimal, and by making it undefined, Lua provides its own implementation in lstrlib.c.  Controlling lua_number2strx is the most general approach to solving such number formatting issues. (For posterity ;-) I solved the problem using the specific build flag LUA_NO_C99_FORMATTING=1 which seems to be intended for just this case and (as you suggest) leaves lua_number2strx undefined in luaconf.h.
Cheers.


Any sample on how to use this package in unit tests?

Hi @simenandre ,
Any idea how I can use this package in my unit tests?
I prefer to check the functionality of my service function in different modes with different values for my environment variables.

Are you looking to change configuration that, ie. mock the functionality of this package?
What I mean is, are there controllers and services etc. that you are using this package, where you want to define the values for?
In that case, you can set the configuration manually. I believe I have a few examples of this in the tests here, but I haven't checked (I answered you directly without checking the code base).
That said, even if it isn't really easy, it should be pretty easy to implement if needed. Tell me how you proceed!
Always happy to accept PRs that makes this package better for everyone, so there's that as well 👍

I have a nestjs service in a module and now want to test different paths of my code based on my environment variable.
For normal environment variables I usually get a copy of current env variables, then fake the variables I want and then copy the backup values again to process.env something similar to this:
describe('environmental variables', () => {
  const OLD_ENV = process.env;

  beforeEach(() => {
    jest.resetModules() // Most important - it clears the cache
    process.env = { ...OLD_ENV }; // Make a copy
  });

  afterAll(() => {
    process.env = OLD_ENV; // Restore old environment
  });

  test('will receive process.env variables', () => {
    // Set the variables
    process.env.NODE_ENV = 'dev';
    process.env.PROXY_PREFIX = '/new-prefix/';
    process.env.API_URL = 'https://new-api.com/';
    process.env.APP_PORT = '7080';
    process.env.USE_PROXY = 'false';

    const testedModule = require('../../config/env').default

    // ... actual testing
  });
});

But I don't know how to do it with envalid and this package. As far as I understand as this package provides a read-only wrapper on top of values there is no set function available to set the values in the tests.

envalid is immutable by design, but I see how you want in the nestjs situation want to have a easy function that you can set the environment.
How about this: We create a test constructor, which just sets the environment or we find a way to set what object to pass to envalid.
Do you wanna take a stab at it?

I personally prefer the second approach to pass an object to envalid for tests. I'll check it in my free time and keep you updated.

OK This is my second try using @golevelup/ts-jest and nestjs-envalid:
import { createMock } from "@golevelup/ts-jest";
import { ENVALID, EnvalidModule } from "nestjs-envalid";
import { Config } from "../../config";

describe("MyService", () => {
  let service: MyService;
  let envMock: Config;

beforeEach(async () => {

    envMock = createMock<Config>({
    // Cache is disabled for all tests by default except for the test cases where we want to test the cache
      CACHE_ENABLED: false,
    });

    onst module: TestingModule = await Test.createTestingModule({
      imports: [],
      providers: [
        MyService,
        // Always use mock for the environment variables
        { provide: ENVALID, useValue: envMock },
      ],
    }).compile();

    service = module.get<MyService>(MyService);
  });

  afterEach(() => {
    jest.clearAllMocks();
  });

    describe("Test the cache", () => {
      it("Cache is Enabled", async () => {
            jest
          .spyOn(envMock, "CACHE_ENABLED", "get")
          .mockReturnValueOnce(true);

           ....

      });
      it("Cache is Disabled", async () => {
            jest
          .spyOn(envMock, "CACHE_ENABLED", "get")
          .mockReturnValueOnce(false);

           ....

      });

But I'm getting this error:
    Property `CACHE_ENABLED` does not have access type get

Here in this line:
jest
          .spyOn(envMock, "CACHE_ENABLED", "get")
          .mockReturnValueOnce(true);

But it seems the mock value is working because I have correct value from here:
envMock = createMock<Config>({
    // Cache is disabled for all tests by default except for the test cases where we want to test the cache
      CACHE_ENABLED: false,
    });

It probably is better to change this library, do you want write access or do you want to fork it?

Let me check to see how we can achieve this. I'll probably send a PR for it. Thanks for your response.


Oracle database compatibility

Hey Håkan,
What kind of databases does it support? We use Oracle using ODP.NET in our projects and wondering if it's compatible with Piranha

Hi there! The code has only been verified and tested against the different versions of SqlServer (LocalDb, SqlExpress, SqlServer 2008, SqlServer 2012). Since it's a rather lightweight framework there has never been any requests of questions about running it on Oracle.
One thing that might be a problem is creating the actual database as this is done through manual SQL-scripts (https://github.com/PiranhaCMS/Piranha/blob/master/Core/Piranha/Data/Scripts/Create.sql) which uses column types that are specific to SQL Server. On the other hand it might run just perfectly when the database has been created.
The long term plan is to move schema creation and query generation over to Entity Framework which will then result in Piranha supporting whatever database Entity Framework supports.
Regards


[Feature] Enable different positioning on secondary monitors

When you have one (or several) extra monitor(s), it would be awesome to be able to place the icons to the right and left individually.
A scenario would be when e.g. the user has three monitors, the left monitor could have the icons to the right, the middle in the middle and the right monitor would have them to the left, so that one would easily see the icons on the area closest to the user.
This request might fit better as two separate issues, one for being able to have the taskbar icon to the right and another for being able to have different on different screens.

@Osyx When you unlock the taskbar you can drag them any where you like.

@ChrisAnd1998 I think @Osyx meant three different taskbarX settings per monitor.
Here's a markdown representation.
left monitor | main monitor | right monitor
      [][][]      [][][]      [][]][]
____________________________________________

where each monitor has a different align settings.

Yes exactly, thank you for making it clearer @kaovilai!
Should have made an illustration as well, my explanation wasn't the best 😅

This functionality becomes a little weird depending on situation,
for me, I move between different environments with different number of screens and their positions. at Home I have huge screen to the left, laptop to the right, at work I have two screens on the desk, and laptop to the right. Also at work I might go to a presentation room and .... well you get the idea.

@rsunde no one forces you to use features you know ;)


EmbassySDK does not adequately check action names.

action name is used as docker container name, which only allows [a-zA-Z0-9][a-zA-Z0-9_.-] chars. replacing spaces with empty string for now, but validation should catch everything
Reported by @chrisguida

Aiden fixed this in the actions-rpc PR by changing the container name to use the action-id rather than the action name. We still need a dump bucket for all the things the sdk doesn't validate, though.

@ProofOfKeags

I get the notifications even when not tagged. Not sure a dump bucket is a good idea since we can't track them independently. But maybe a full feature scoping on the set of things to be validated in 0.3.1 is a good idea.


[ENH] DummyClassifier

We should implement a DummyClassifier, similar to the one in sklearn.
Functionality can be equivalent, except that it should inherit from BaseClassifier in sktime.
Suggestion: impot sklearn DummyClassifier, loop through all the inputs and loop through y, create some 2D X for the sklearn classifier which will be ignored anyway.

If no one objects I am interested in working on it to get my feet wet. Seems like a great first issue!

Great! Have fun!
Here's the developer guide on adding a new estimator:
https://www.sktime.org/en/stable/developer_guide/add_estimators.html
In this case, we are dealing with a time series classifier, so it should inherit from BaseClassifier.


Send report once

Docs for https://github.com/mautic/mautic/pull/7432

New PR created in the new Docs repo so closing this one down.


Support ORDER BY clauses in pagination and queries without FROM.

Pagination in V2: Phase 2. See Phase 1 in #1497.
Doc: https://github.com/Bit-Quill/opensearch-project-sql/blob/61767f2b200b2a7f8c8b2df32de209b3c30caa61/docs/dev/Pagination-v2.md
This PR depends on #1500.
curl -XPOST http://localhost:9200/_plugins/_sql -H 'Content-Type: application/json' -d '{"query": "select * from calcs order by int0, num1;", "fetch_size": 3 }'

You can use attached script for testing as well. Command line: ./cursor_test.sh <table> <page size>. Requires jq. Rename the script before use.
cursor_test.sh.txt
Description
Add support for more complex queries in paged requests.
Supported things:

GROUP BY clause
queries without FROM clause

Unsupported things:

expressions in GROUP BY - #1471

Issues Resolved
Support of ORDER BY clause and support queries without FROM clause.
Check List

[x] New functionality includes testing.

[x] All tests pass, including unit test, integration test and doctest

[x] New functionality has been documented.

[x] New functionality has javadoc added
[ ] New functionality has user manual doc added

[x] Commits are signed per the DCO using --signoff

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Codecov Report

Merging #1599 (547a199) into feature/pagination/integ (8e624a5) will increase coverage by 0.01%.
The diff coverage is 100.00%.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
@@                      Coverage Diff                       @@
##             feature/pagination/integ    #1599      +/-   ##
==============================================================
+ Coverage                       97.23%   97.24%   +0.01%
- Complexity                       4233     4252      +19
==============================================================
  Files                             387      387
  Lines                           10628    10669      +41
  Branches                          721      725       +4
==============================================================
+ Hits                            10334    10375      +41
  Misses                            287      287
  Partials                            7        7

Flag
Coverage Δ

sql-engine
97.24% <100.00%> (+0.01%)
:arrow_up:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

...ch/sql/executor/pagination/CanPaginateVisitor.java
100.00% <100.00%> (ø)

...org/opensearch/sql/planner/DefaultImplementor.java
100.00% <100.00%> (ø)

...opensearch/sql/planner/physical/LimitOperator.java
100.00% <100.00%> (ø)

.../opensearch/request/InitialPageRequestBuilder.java
100.00% <100.00%> (ø)

.../storage/scan/OpenSearchPagedIndexScanBuilder.java
100.00% <100.00%> (ø)

Thanks!

Will restart backport after merging #1741


Waybar suddenly looking weird

I booted up my machine and Waybar then suddenly looked very weird...

I'm using the package called waybar-hyprland-git.
Here is the process logs for waybar, or well this is the logs from the process id it was given:
00:00:00.000 [INFO] [libseat] [libseat/backend/seatd.c:64] Could not connect to socket /run/seatd.sock: No such file or directory
00:00:00.000 [INFO] [libseat] [libseat/libseat.c:76] Backend 'seatd' failed to open seat, skipping
00:00:00.125 [INFO] [libseat] [libseat/libseat.c:73] Seat opened with backend 'logind'
00:00:00.125 [INFO] [backend/session/session.c:109] Successfully loaded libseat session
00:00:00.129 [INFO] [backend/backend.c:220] Found 1 GPUs
00:00:00.129 [INFO] [backend/drm/backend.c:202] Initializing DRM backend for /dev/dri/card1 (amdgpu)
00:00:00.129 [INFO] [backend/drm/drm.c:249] Found 4 DRM CRTCs
00:00:00.130 [INFO] [backend/drm/drm.c:207] Found 9 DRM planes
00:00:00.133 [INFO] [render/egl.c:206] Supported EGL client extensions: EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses EGL_EXT_client_extensions EGL_KHR_debug EGL_EXT_platform_device EGL_EXT_platform_wayland EGL_KHR_platform_wayland EGL_EXT_platform_x11 EGL_KHR_platform_x11 EGL_EXT_platform_xcb EGL_MESA_platform_gbm EGL_KHR_platform_gbm EGL_MESA_platform_surfaceless
00:00:00.173 [INFO] [render/egl.c:355] Using EGL 1.5
00:00:00.173 [INFO] [render/egl.c:356] Supported EGL display extensions: EGL_ANDROID_blob_cache EGL_ANDROID_native_fence_sync EGL_EXT_create_context_robustness EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_EXT_protected_surface EGL_IMG_context_priority EGL_KHR_cl_event2 EGL_KHR_config_attribs EGL_KHR_context_flush_control EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image_base EGL_KHR_no_config_context EGL_KHR_reusable_sync EGL_KHR_surfaceless_context EGL_EXT_pixel_format_float EGL_KHR_wait_sync EGL_MESA_configless_context EGL_MESA_drm_image EGL_MESA_image_dma_buf_export EGL_MESA_query_driver EGL_WL_bind_wayland_display
00:00:00.173 [INFO] [render/egl.c:358] Supported EGL device extensions: EGL_EXT_device_drm EGL_EXT_device_drm_render_node
00:00:00.173 [INFO] [render/egl.c:360] EGL vendor: Mesa Project
amdgpu: amdgpu_cs_ctx_create2 failed.
Please wait for it to finish or terminate it to continue.
[248 08:43:29.353575] Ignoring unknown config key: open_url_modifiers
[248 08:43:29.507425] [glfw error 65544]: process_desktop_settings: failed with error: [org.freedesktop.DBus.Error.UnknownMethod] No such interface “org.freedesktop.portal.Settings” on object at path /org/freedesktop/portal/desktop
[248 08:43:53.187519] Ignoring unknown config key: open_url_modifiers
[248 08:43:53.324384] [glfw error 65544]: process_desktop_settings: failed with error: [org.freedesktop.DBus.Error.UnknownMethod] No such interface “org.freedesktop.portal.Settings” on object at path /org/freedesktop/portal/desktop
[248 08:44:00.760551] Escape codes to resize text area are not supported
[248 08:44:21.248030] Ignoring unknown config key: open_url_modifiers
[248 08:44:21.383904] [glfw error 65544]: process_desktop_settings: failed with error: [org.freedesktop.DBus.Error.UnknownMethod] No such interface “org.freedesktop.portal.Settings” on object at path /org/freedesktop/portal/desktop
00:03:40.412 [INFO] [xwayland/server.c:108] Starting Xwayland on :1
The XKEYBOARD keymap compiler (xkbcomp) reports:
> Warning:          Unsupported maximum keycode 708, clipping.
>                   X11 cannot support keycodes above 255.
Errors from xkbcomp are not fatal to the X server
[11607:11623:0905/084423.553916:ERROR:object_proxy.cc(590)] Failed to call method: org.freedesktop.DBus.Properties.Get: object_path= /org/freedesktop/portal/desktop: org.freedesktop.DBus.Error.InvalidArgs: No such interface “org.freedesktop.portal.FileChooser”
[11607:11623:0905/084423.554160:ERROR:select_file_dialog_linux_portal.cc(274)] Failed to read portal version property
[11607:11607:0905/084423.764253:ERROR:url_pattern_set.cc(287)] Invalid url pattern: chrome://startpage/
[11607:11607:0905/084423.764429:ERROR:url_pattern_set.cc(287)] Invalid url pattern: chrome://startpage/
[11607:11607:0905/084423.764481:ERROR:url_pattern_set.cc(287)] Invalid url pattern: chrome://startpage/
00:03:42.214 [ERROR] [xwayland/xwm.c:1594] xcb error: op ConfigureWindow (no minor), code Value (no extension), sequence 210, value 0
[11607:11621:0905/084426.465021:ERROR:content_hash.cc(256)] Fetching verified_contents.json for extension id: pobhoodpcipjmedfenaigbeloiidbflp version: 5.1.4 failed with error code 404
[11607:11621:0905/084426.468772:ERROR:content_hash.cc(256)] Fetching verified_contents.json for extension id: ilhjhegbgdghfkdgeahkpikkjgaaoklh version: 3.0.0 failed with error code 404
[11607:11621:0905/084426.469663:ERROR:content_hash.cc(256)] Fetching verified_contents.json for extension id: ponfpcnoihfmfllpaingbgckeeldkhle version: 2.0.121 failed with error code 404
[11607:11621:0905/084426.470614:ERROR:content_hash.cc(256)] Fetching verified_contents.json for extension id: hlepfoohegkhhmjieoechaddaejaokhf version: 23.8.24 failed with error code 404
[11607:11621:0905/084426.476195:ERROR:content_hash.cc(256)] Fetching verified_contents.json for extension id: onjegdbehgoamaiochjfnkokondpgoim version: 1.4 failed with error code 404
[11607:11621:0905/084426.486065:ERROR:content_hash.cc(256)] Fetching verified_contents.json for extension id: kekjfbackdeiabghhcdklcdoekaanoel version: 0.9.5 failed with error code 404
[11607:11607:0905/084430.595493:ERROR:CONSOLE(2)] "Uncaught (in promise) [object Object]", source: chrome://startpage/startpage.js (2)
[11607:11607:0905/084430.610198:ERROR:CONSOLE(2)] "Uncaught (in promise) [object Object]", source: chrome://startpage/startpage.js (2)
[11657:11657:0905/084502.041891:ERROR:gl_surface_presentation_helper.cc(260)] GetVSyncParametersIfAvailable() failed for 1 times!
[11657:11657:0905/084502.045450:ERROR:gl_surface_presentation_helper.cc(260)] GetVSyncParametersIfAvailable() failed for 2 times!
[11657:11657:0905/084506.213695:ERROR:gl_surface_presentation_helper.cc(260)] GetVSyncParametersIfAvailable() failed for 3 times!
[248 08:45:45.622552] Ignoring unknown config key: open_url_modifiers
[248 08:45:45.765339] [glfw error 65544]: process_desktop_settings: failed with error: [org.freedesktop.DBus.Error.UnknownMethod] No such interface “org.freedesktop.portal.Settings” on object at path /org/freedesktop/portal/desktop
/usr/bin/wl-clipboard-history: line 34: warning: command substitution: ignored null byte in input

It still functions with the time and some of the custom scripts I'm running, but the only thing I noticed was different was the size of the modules and the missing workspaces.
I can post my config file if it may be needed.
For info I'm running on:
Arch Linux kernel version 6.4.12-arch1-1
Hyprland 0.29.1

So changing the config is enough.

I think I tried using hyprland/workspaces and it still didn't work

I made a script that auto restarts waybar whenever I change my configs in the waybar config folder.
And as you can see having swapped it for hyprland/workspaces it did not seem to fix it.
I will try a reboot a little later and see what happens then.

@stauersbol maybe you can be a bit more specific in the title, to avoid others making duplicates (like mine #2463)...
FWIW, on NixOS with (just to be sure) Hyprland and Waybar from master it works after changing to hyprland/workspaces

@stauersbol maybe you can be a bit more specific in the title, to avoid others making duplicates (like mine #2463)...
FWIW, on NixOS with (just to be sure) Hyprland and Waybar from master it works after changing to hyprland/workspaces

I've added a specifier to the title of the issue. Might make it more clear as to which distro I'm experiencing the issue is.
Thank you for pointing it out!

Let me do a reboot and see what happens

Can confirm it is still an issue for me.
Let me post my config, so it's easier to see what I have for reference

{
  "layer": "top",
  "position": "top",
  "mod": "dock",
  "exclusive": true,
  "passthrough": false,
  "gtk-layer-shell": true,
  "height": 0,
  "modules-left": ["clock", "custom/weather", "wlr/workspaces"],
  "modules-center": ["hyprland/window"],
  "modules-right": [
    "tray",
    "custom/updates",
    "custom/language",
    "battery",
    "backlight",
    "custom/spotify",
    "pulseaudio",
    "pulseaudio#microphone"
  ],
  "hyprland/window": {
    "format": "{}"
  },
  "hyprland/workspaces": {
    "disable-scroll": true,
    "all-outputs": true,
    "on-click": "activate",
    //"format": "{icon}",
    "persistent_workspaces": {
      "1": [],
      "2": [],
      "3": [],
      "4": [],
      "5": [],
      "6": [],
      "7": [],
      "8": [],
      "9": [],
      "10": []
    }
  },
  "custom/updates": {
    "format": "{}",
    "interval": 300, // every two hours
    "exec": "~/.config/waybar/scripts/update-sys", // # of updates and tooltip details
    "on-click": "~/.config/waybar/scripts/update-sys update", // update system
    "tooltip": false
  },
  "custom/weather": {
    "tooltip": true,
    "format": "{}",
    "interval": 30,
    "exec": "~/.config/waybar/scripts/waybar-wttr.py",
    "return-type": "json"
  },
  "custom/spotify": {
    "exec": "~/.config/waybar/scripts/mediaplayer.py --player spotify",
    "format": "{}  ",
    "return-type": "json",
    "on-click": "playerctl play-pause",
    "on-scroll-up": "playerctl next",
    "on-scroll-down": "playerctl previous"
  },
  "tray": {
    "icon-size": 13,
    "spacing": 10
  },
  "clock": {
    "format": "{: %I:%M %p   %d/%m}",
    "tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>"
  },
  "backlight": {
    "device": "intel_backlight",
    "format": "{icon} {percent}%",
    "format-icons": ["", "", ""],
    "on-scroll-up": "brightnessctl set 1%+",
    "on-scroll-down": "brightnessctl set 1%-",
    "min-length": 6
  },
  "battery": {
    "states": {
      "good": 95,
      "warning": 30,
      "critical": 20
    },
    "format": "{icon} {capacity}%",
    "format-charging": " {capacity}%",
    "format-plugged": " {capacity}%",
    "format-alt": "{time} {icon}",
    "format-icons": ["", "", "", "", "", "", "", "", "", "", ""]
  },
  "pulseaudio": {
    "format": "{icon} {volume}%",
    "tooltip": false,
    "format-muted": " Muted",
    "on-click": "pamixer -t",
    "on-scroll-up": "pamixer -i 5",
    "on-scroll-down": "pamixer -d 5",
    "scroll-step": 5,
    "format-icons": {
      "headphone": "",
      "hands-free": "",
      "headset": "",
      "phone": "",
      "portable": "",
      "car": "",
      "default": ["", "", ""]
    }
  },
  "pulseaudio#microphone": {
    "format": "{format_source}",
    "format-source": " {volume}%",
    "format-source-muted": " Muted",
    "on-click": "pamixer --default-source -t",
    "on-scroll-up": "pamixer --default-source -i 5",
    "on-scroll-down": "pamixer --default-source -d 5",
    "scroll-step": 5
  }
}

This is what I'm currently using as my config for waybar.
As you can see I'm using hyprland/workspaces and it's not working.

Image for reference. The other bits work, just not workspaces.

Oh wait face palm moment...🤦
I forgot to change 1 bit😂


Struggling to get started, reading an html file vis SSIS C#

Good day, I urgently need help on HAP
I have html files and via ssis using c# i would like to write the values to a database.
i installed the:

nutmeg
Install-Package HtmlAgilityPack -Version <IP_ADDRESS>
in c# script i added reference to the "\packages\HtmlAgilityPack.<IP_ADDRESS>\lib\Net40\HtmlAgilityPack.dll"

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Windows;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;       // HttpWebRequest
using System.IO;        // Stream
using HtmlAgilityPack;  // Html parse
using System.Text;      // Encoding
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;
namespace ST_43f237fb54624596ad8d1aacf94e650c
{ Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
	{
             var doc = new HtmlAgilityPack.HtmlDocument();
        }
}

It keeps on failing on the first and only line, no errors in the script as it allows me to select the htmldocument etc but in ssis i cant see the error.
Anybody please help, any ideas as i have been struggling for days to get past this 1 line and im running out of time.
Thank You

Hello @Ismailc001 ,
Have you copied the HtmlAgilityPack dll in the NET40 directory?
C:\Windows\Microsoft.NET\Framework\v4.0.30319\
There is some basic getting started blog about SSIS && Html Agility Pack like this one:

https://jamessummerlin.com/tag/htmlagilitypack/

Let me know if that helped you.
Best Regards,
Jonathan

Hi,
Thank you very much for assisting ☺
I manage to get the script to work with PowerShell
add-type -Path 'C:\Software\HtmlAgilityPack.<IP_ADDRESS>\lib\Net40\HtmlAgilityPack.dll'
$filename = 'c:\temp\test.html'
$HTMLDocument = New-Object HtmlAgilityPack.HtmlDocument
$wc = New-Object System.Net.WebClient
$result = $HTMLDocument.LoadHTML($wc.DownloadString($filename))
$HTMLDocument.DocumentNode.SelectSingleNode("(//table)[2]").InnerText
C# via SSIS no luck. I really prefer C# in SSIS as I have more control with variables etc…
Please Help
<EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>From: Jonathan Magnan<EMAIL_ADDRESS>Sent: 20 June 2017 2:26 PM
To: zzzprojects/html-agility-pack
Cc: Ismail Cassiem; Mention
Subject: Re: [zzzprojects/html-agility-pack] Struggling to get started, reading an html file vis SSIS C# (#21)
Hello @Ismailc001https://github.com/ismailc001 ,
Have you copied the HtmlAgilityPack dll in the NET40 directory?
C:\Windows\Microsoft.NET\Framework\v4.0.30319\
There is some basic getting started blog about SSIS && Html Agility Pack like this one:

https://jamessummerlin.com/tag/htmlagilitypack/

Let me know if that helped you.
Best Regards,
Jonathan
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/zzzprojects/html-agility-pack/issues/21#issuecomment-309737142, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AcM0GH9L_HMI33VeLSLKDWI5qfX13stUks5sF7pTgaJpZM4N_ZGn.

This inbound email has been scanned by the IS Mail Control service.
For more information please visit http://www.is.co.za

This outbound email has been scanned by the IS Mail Control service.
For more information please visit http://www.is.co.za

Hello @Ismailc001 ,
Sorry to ask again, but have you done this step:

Since we are using SSIS on SQL Server 2014, copy the files in the .Net40 directory to the C:\Windows\Microsoft.NET\Framework\v4.0.30319\ directory of the server that will be running your SSIS packages

If the SSIS fail on the first line, it's probably because it cannot find the assembly reference.

Hi,
I tried but still no luck, I am going to continue using Powershell.
Can you assist me perhaps on how I go about capturing e columns and values on the attached.
Regards
From: Jonathan Magnan<EMAIL_ADDRESS>Sent: 20 June 2017 3:31 PM
To: zzzprojects/html-agility-pack
Cc: Ismail Cassiem; Mention
Subject: Re: [zzzprojects/html-agility-pack] Struggling to get started, reading an html file vis SSIS C# (#21)
Hello @Ismailc001https://github.com/ismailc001 ,
Sorry to ask again, but have you done this step:
Since we are using SSIS on SQL Server 2014, copy the files in the .Net40 directory to the C:\Windows\Microsoft.NET\Framework\v4.0.30319\ directory of the server that will be running your SSIS packages
If the SSIS fail on the first line, it's probably because it cannot find the assembly reference.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/zzzprojects/html-agility-pack/issues/21#issuecomment-309753750, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AcM0GHOZ7lC19FaNmhZcrXcNMzQ1G_Ftks5sF8l8gaJpZM4N_ZGn.

This inbound email has been scanned by the IS Mail Control service.
For more information please visit http://www.is.co.za

This outbound email has been scanned by the IS Mail Control service.
For more information please visit http://www.is.co.za

Closing Comment: Feel free to re-open if you need more support from our part.

I am having the same issue in the very beginning (add reference manually and copy the dll file to almost everywhere). Looks like copying file and add reference won't work.
The solution is to install HtmlAgilityPack by run the command - Install-Package HtmlAgilityPack -Version 1.8.0
inside Script Task (Through Tools -> Nuget Package Manager, inside SSIS, my version is VS2015 Prof.)


Test initialization error (ClassNotFoundException)

From<EMAIL_ADDRESS>on June 17, 2011 20:15:27
What steps will reproduce the problem? 1. Please see http://groups.google.com/group/powermock/browse_thread/thread/2ce5f86ad4a8f030/0653c54d8b59e4d9?#0653c54d8b59e4d9 2. Use his test classes or the provided Test.zip (same thing, just slightly modified).
What is the expected output?
All classes should get loaded either by the system class loader or the same class.getClassLoader()
What do you see instead?
System class loader cannot find classes and there is no other fall back mechanism. What version of the product are you using? On what operating system? 1. PowerMock 1.4.9 with Mockito API extension (including source but excluding dependencies)
2. mockito-core-1.8.5
3. junit-4.8.2
4. Windows 7
4. Java 1.6 Please provide any additional information below. NOTE1:
I was having the same issue as Mikael.  However I was running my test via a web container (an e-commerce platform with a built in junit apache test servlet).
NOTE2:
This is the root of the problem:
org.powermock.api.mockito.internal.mockcreation.MockCreator.MockitoStateCleaner.clearThreadLocalIn(Class cls)...
final Class clazz = ClassLoaderUtil.loadClass(cls, ClassLoader.getSystemClassLoader());
I have made the following modification to the class and it now works.  This may not be the final fix that the powermock developers might use, but its a step in the right direction.
private void clearThreadLocalIn(Class cls)
{
  Whitebox.getInternalState(cls, ThreadLocal.class).set(null);
  final Class clazz;
if(cls != null && cls.getClassLoader() != null)
{
clazz = ClassLoaderUtil.loadClass(cls, cls.getClassLoader());
}
else
{
clazz = ClassLoaderUtil.loadClass(cls, ClassLoader.getSystemClassLoader());
}
Whitebox.getInternalState(clazz, ThreadLocal.class).set(null);
}
Attachment: Test.zip
Original issue: http://code.google.com/p/powermock/issues/detail?id=333

From<EMAIL_ADDRESS>on June 18, 2011 03:20:41
Thanks for investigating this and thanks for fixing it. I've modified the code a bit and committed it to trunk. Please help me verify whether it works or not.
Status: Accepted

From<EMAIL_ADDRESS>on August 21, 2011 14:35:39
I consider this fixed since I haven't heard anything.
Status: Fixed

From<EMAIL_ADDRESS>on August 25, 2011 10:22:33
I'm getting similar problem, basically test written with powermock runs in eclipse but fails with ant
I'm using
mockito-all-1.8.5 jar
javassist-3.14.0.-GA.jar
powermock-mockito-1.4.9.-full.jar (I also tried 1.4.10 version of this but getting the same problem)
I'm getting the below problem
java.lang.ClassNotFoundException: org.mockito.internal.progress.ThreadSafeMockingProgress
java.lang.RuntimeException: java.lang.ClassNotFoundException: org.mockito.internal.progress.ThreadSafeMockingProgress
at org.powermock.api.support.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:52)
at org.powermock.api.support.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:26)
at org.powermock.api.mockito.internal.mockcreation.MockCreator$MockitoStateCleaner.clearThreadLocalIn(MockCreator.java:157)
at org.powermock.api.mockito.internal.mockcreation.MockCreator$MockitoStateCleaner.clearMockProgress(MockCreator.java:148)
at org.powermock.api.mockito.internal.mockcreation.MockCreator$MockitoStateCleaner.run(MockCreator.java:143)
at org.powermock.core.MockRepository.clear(MockRepository.java:121)
at org.powermock.reflect.internal.WhiteboxImpl.performMethodInvocation(WhiteboxImpl.java:2014)
at org.powermock.reflect.internal.WhiteboxImpl.doInvokeMethod(WhiteboxImpl.java:885)
at org.powermock.reflect.internal.WhiteboxImpl.invokeMethod(WhiteboxImpl.java:859)
at org.powermock.reflect.Whitebox.invokeMethod(Whitebox.java:466)
at org.powermock.modules.junit4.common.internal.impl.PowerMockJUnit4RunListener.testFinished(PowerMockJUnit4RunListener.java:55)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:208)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:146)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:121)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:123)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:102)
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)
at net.sf.antcontrib.logic.For$Reflector.call(Unknown Source)
at net.sf.antcontrib.logic.For.doSequentialIteration(Unknown Source)
at net.sf.antcontrib.logic.For.doTheTasks(Unknown Source)
at net.sf.antcontrib.logic.For.execute(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.mockito.internal.progress.ThreadSafeMockingProgress
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:305)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:246)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.powermock.api.support.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:50)
at org.powermock.api.support.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:26)
at org.powermock.api.mockito.internal.mockcreation.MockCreator$MockitoStateCleaner.clearThreadLocalIn(MockCreator.java:158)
Appreciate any help.

From<EMAIL_ADDRESS>on August 26, 2011 05:31:32
I think the issue is still existing because when i came to know about power mock a couple of days back the latest version was 1.4.9 and it was working fine for me in the eclipse IDE for an individual test suit but facing the problem when running through the ant. And i posted the same problem in the new posts follow the link http://groups.google.com/group/powermock/browse_thread/thread/4c87a3e01fd72bca?hl=en After going through this issue i noticed it has been closed on Aug 21st and i downloaded the latest version 1.4.10 but still i am facing the same problem, Johan please look into this before closing this defect. I am working with this and will provide any updates if i am successful.

From<EMAIL_ADDRESS>on August 29, 2011 04:24:08
I am sorry johan, the issue is not with power mock i am able to solve it, it is due to some other conflicts with the other jars in my app.
This is working fine and this defect can be considered fixed.

From<EMAIL_ADDRESS>on August 29, 2011 10:51:15
Glad you sorted it out. Thanks for letting us know.

From<EMAIL_ADDRESS>on August 29, 2011 20:33:30
if you can please elaborate on conficting jar(s), that would be really helpful

From<EMAIL_ADDRESS>on September 02, 2011 16:48:09
Yes it worked with powermock1.4.10


docker version update to support multi stage builds

Hey I've recently started to enjoy the heptio quickstart.
So far it's been quite the awesome and easy to use, providing exactly what I've expected!
Today I setup a Jenkins to shift some of our docker build and software CI into kubernetes.
Sadly the installed docker version does not support the multi stage build feature which we use quite a lot. As it allows us to encapsulate the whole build, test and release artifact in one simple step.
Would you be interested in updating or is there a particular reason to stick with the current one?
If you're open to upgrading I'll try to help, though I haven't done any AMI development yet.

@zetaron we track upstream versions that are fully vetted.  Are you building on your cluster, or can you build externally?

Kubernetes 1.8 is currently only tested against 1.11.2, 1.12.6, 1.13.1, and 17.03.2 (https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.8.md#external-dependencies). Multi-stage builds are not available until 17.05, unfortunately.
Care should be exercised when building Docker images in this manner, as all of the paths require some level of escalated privileges.

@timothysc I wanted to build on the cluster for simplicity but could build externally which would somewhat overcomplicate things, I think will just go with not using multistage builds for now.
@craigtracey Oh I did not know that Kubernetes is currently not tested against 17.05, will keep an eye on it.


Esp_base_mac_addr_set() does not handle overflow when incrementing base mac address for interfaces. (IDFGH-10452)

Answers checklist.

[X] I have read the documentation ESP-IDF Programming Guide and the issue is not addressed there.
[X] I have updated my IDF branch (master or release) to the latest version and checked that the issue is present there.
[X] I have searched the issue tracker for a similar issue and not found a similar issue.

IDF version.
v4.3.3-86-g7988aec391
Operating System used.
Linux
How did you build your project?
Command line with idf.py
If you are using Windows, please specify command line type.
None
What is the expected behavior?
I have a mac address that looks like this - CC:CC:CC:CC:41:FF
If this address is set as the base mac address with esp_base_mac_addr_set() then I expect the  BLE mac address to be CC:CC:CC:CC:42:01
What is the actual behavior?
Instead, reading the BLE mac address gives the following mac - CC:CC:CC:CC:41:01 . The last byte increments correctly but the byte before does not, it is 41 but i expect it to be 42.
Steps to reproduce.
Set base mac address with an address that will overflow by incrementing the last byte and read the derived by incrementation mac addresses from interfaces.
Build or installation Logs.
No response
More Information.
No response

@mm66 Could you please add, which chip are you using?

@igrr ESP32-D0WD-V3 (revision 3)

@mm66 After checking with our team responsible for production, for ESP32 products we shouldn't have chips with MAC address ending in 41:FF. If your chip has such a MAC address, this indicates either a production mistake or an eFuse corruption.
Could you please run espefuse.py --port PORT_NAME summary and share the complete output you get?

@igrr You misunderstood me. To clarify we are setting our own base mac addresses for production purposes, so it is not about the mac address that is burnt on the chip. So it is an issue for mass production since there would be overlap in mac addresses due to overflow in incrementing the base mac address. So we set the address that ends in 41:FF on purpose expecting it would increment to 42:01 for BLE mac address.

I'm sorry for misunderstanding what you meant!
How many universal MAC addresses are you reserving for each device? For example, do you assign addresses such as 41:00, 41:04, 41:08, ... or 41:00, 41:02, 41:04, ...?
Also, what is the value of CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES value in sdkconfig? (Should be either CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR or CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO).

Hi @mm66!
Actually, it is not a bug.  We have a note for ESP32_UNIVERSAL_MAC_ADDRESSES which says the following:

... If the number of universal MAC addresses is four, all four interfaces (WiFi station, WiFi softap,
Bluetooth and Ethernet) receive a universally administered MAC address. These are generated
sequentially by adding 0, 1, 2 and 3 (respectively) to the final octet of the base MAC address....

It is expected behavior that we add 0, 1, 2, 3 to only the final octet. Probably we need to make it clear in the doc.
Starting from v5.1, we have esp_iface_mac_addr_set() that allows changing MAC address for every interface. So it will help for your case but as I can see you use the v4.3. We can not backport features to the old versions and note that the service period is ended.
4 MACs per device:
CC:CC:CC:CC:00:00
CC:CC:CC:CC:00:04
CC:CC:CC:CC:00:08
CC:CC:CC:CC:00:0c
CC:CC:CC:CC:00:10
...
CC:CC:CC:CC:00:f0
CC:CC:CC:CC:00:f4
CC:CC:CC:CC:00:f8
CC:CC:CC:CC:00:fc
CC:CC:CC:CC:01:00
CC:CC:CC:CC:01:04
CC:CC:CC:CC:01:08

You should not start to give MAC addresses from random offsets. You must start at an address that is a multiple of 4 then everything gets correct. It is how we are doing on our side.

I understand, thank you for a quick response :)


No Globals not working in Opera

When using qunit with opera the noglobals option is generating failures:
Introduced global variable(s): test-output6, test-output7, test-output8, test-output9Source: 	    ok( false, "Introduced global variable(s): " + newGlobals.join(", ") );
Opera version 11.61
Build 1250
Linux x64

Could you clarify exactly what is expected, and what is not working? Perhaps a pastie with the code you are working on would be useful. cc @miketaylr

Hi,
Expected is that there is no warning displayed about new global vars, in firefox and chrome this happens, in Opera it displays the error that there are new global vars.
You can see it happen here: http://js-linux.nl/Javascript-Linux/test.html?noglobals=true In some cases it happens in the first test, in some cases in the second test (It changes on a refresh), the mentioned globals are not from my code at all.
The code in that specif test is here: https://github.com/paul999/Javascript-Linux/blob/master/tests/general.js


Fix typo in setActive documentation

Contains a minor typo fix

Apologies for the delay, but it's now merged. Thanks!


ci: remove unnecessary step id

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 90.38%. Comparing base (5313764) to head (1d79574).

Additional details and impacted files
@@           Coverage Diff           @@
##             main      #20   +/-   ##
=======================================
  Coverage   90.38%   90.38%
=======================================
  Files          11       11
  Lines         312      312
  Branches       68       69    +1
=======================================
  Hits          282      282
+ Misses         30       29    -1
- Partials        0        1    +1

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


fix(dashboard): order charts by changed_on

SUMMARY

Fixes issue identified in the linked ticket
BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF

N/A
TEST PLAN

check that charts are ordered by change_by attr in dashboard builder

ADDITIONAL INFORMATION

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

thanks for the quick fix!!!

Codecov Report

Merging #11594 into master will decrease coverage by 5.43%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master   #11594      +/-   ##
==========================================
- Coverage   66.59%   61.15%   -5.44%
==========================================
  Files         876      420     -456
  Lines       42146    26182   -15964
  Branches     3943        0    -3943
==========================================
- Hits        28066    16011   -12055
+ Misses      13977    10171    -3806
+ Partials      103        0     -103

Flag
Coverage Δ

cypress
?

javascript
?

python
61.15% <ø> (-0.99%)
:arrow_down:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

superset/db_engines/hive.py
0.00% <0.00%> (-85.72%)
:arrow_down:

superset/databases/commands/create.py
31.91% <0.00%> (-59.58%)
:arrow_down:

superset/db_engine_specs/hive.py
53.90% <0.00%> (-30.08%)
:arrow_down:

superset/views/database/mixins.py
59.64% <0.00%> (-22.81%)
:arrow_down:

superset/db_engine_specs/mysql.py
79.59% <0.00%> (-12.25%)
:arrow_down:

superset/db_engine_specs/presto.py
69.76% <0.00%> (-11.88%)
:arrow_down:

superset/databases/commands/update.py
85.71% <0.00%> (-8.17%)
:arrow_down:

superset/databases/api.py
81.94% <0.00%> (-6.02%)
:arrow_down:

superset/databases/dao.py
94.11% <0.00%> (-5.89%)
:arrow_down:

superset/views/database/validators.py
78.94% <0.00%> (-5.27%)
:arrow_down:

... and 472 more

Continue to review full report at Codecov.

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


Exported synonyms for internal Completed, Cacheable & Builder

It will be possible to create functions that return prepared Redis commands:
type Object struct {
    ID        string
    Datetime time.Time
    Message string
}

func (o Object) SaveCmd(client rueidis.Client) rueidis.Completed {
    return client.B().
        Hset().
        Key("out:interval:"+o.ID).
        FieldValue().
        FieldValue("datetime", fmt.Sprint(o.Datetime.Unix())).
        FieldValue("message", o.Message).
        Build()
}

I didn't replace cmd.Completed with [rueidis].Completed in the entire library, but it makes sense to do these. Especially in the interface description:
type Client interface {
    B() Builder
    Do(ctx context.Context, cmd Completed) (resp RedisResult)
    DoMulti(ctx context.Context, multi ...Completed) (resp []RedisResult)
    DoCache(ctx context.Context, cmd Cacheable, ttl time.Duration) (resp RedisResult)
    DoMultiCache(ctx context.Context, multi ...CacheableTTL) (resp []RedisResult)
    Receive(ctx context.Context, subscribe Completed, fn func(msg PubSubMessage)) error
    Dedicated(fn func(DedicatedClient) error) (err error)
    Dedicate() (client DedicatedClient, cancel func())
    Nodes() map[string]Client
    Close()
}

I guess I will probably follow this PR to make cmd.Completed public before rueidis v1, but I haven't have a concrete idea about how to do that.
Just reference some requirements I mentioned in the issue https://github.com/rueian/rueidis/issues/121#issuecomment-1307346862 in case if we need further discussion here.
In addition to just make it public, there might be chances of adding more features, such as allowing command to be reused.

I "played around" a little with the command generator and I got the following:
https://github.com/mdigger/redis-cmds-generation-experiment
There is no such problem! :)
I changed too much there while I was dealing with the generator. So I'm not suggesting this as a substitute.
Based idea: Completed & Cacheabe are interface...

I "played around" a little with the command generator and I got the following:
https://github.com/mdigger/redis-cmds-generation-experiment

Hi @mdigger, is this repository public? I can't see it.

I'm sorry! Made it public.

Based idea: Completed & Cacheabe are interface...

I am worry about if this approach will cause additional GC overhead, for example the built cmd.completed may easily escaped to heap?

func BenchmarkCompleted(b *testing.B) {
	z := completed{
		command: newCommand("GET", "TEST"),
		ctags:   ctagReadOnly,
		cslot:   0,
	}
	var r Completed
	r = z

	b.Run("via interface", func(b *testing.B) {
		b.ReportAllocs()
		for i := 0; i < b.N; i++ {
			s := r.String()
			_ = s
		}
	})

	b.Run("direct", func(b *testing.B) {
		b.ReportAllocs()
		for i := 0; i < b.N; i++ {
			s := z.String()
			_ = s
		}
	})
}

BenchmarkCompleted/via_interface-10
46866532
24.32 ns/op
8 B/op
1 allocs/op

BenchmarkCompleted/direct-10
50613157
23.29 ns/op
8 B/op
1 allocs/op

Hi @mdigger,
Thank you for benchmarking it. But your benchmark is probably too minimal to test heap allocations.
I am worry about whether the built command will be easily escaped to heap if we pass it to the client.
For example with the following client implementation, which is actually very similar to the implementation rueidis used:
type Client struct {
	ch chan Completed // Completed is a interface
}

//go:noinline
func (c *Client) Do(ctx context.Context, cmd Completed) {
	c.ch <- cmd
	return
}

We pass the built command into it:
func TestPassInterface(t *testing.T) {
	cmd := Builder{}.Get().Key("").Build() // this is line 20
	new(Client).Do(nil, cmd)
}

Then we compile it with -gcflags="-m", we can see this message saying that the cmd on the line 20 is allocated on heap and implying we need to pay additional GC overhead some time later:
▶ go test -gcflags="-m" client_test.go
./client_test.go:20:17: cmd escapes to heap

I understand, but I do not know any other way to solve the problem of creating Completed instances.
If there is a struct, it doesn't matter if it is public or not, but you can always create a new variable of this type. If you want to prohibit the creation of new elements of some type, then the only way I know is to define it as an interface.
// These cases should be rejected.
client.Do(ctx, cmds.Completed{})

If there is a struct, it doesn't matter if it is public or not, but you can always create a new variable of this type.

At least for now, the client.Do(ctx, cmds.Completed{}) case can't be compiled, right?
But, yes, if we make it public, then we probably need to have some flag indicating its completeness inside the struct and check it on runtime.

cmds := make(rueidis.Commands, 1)
client.Do(context.Background(), cmds[0])

;)

Or use interfaces so that you cannot create an instance yourself. Or make it public and allow you to do anything with it, but return an error when trying to use it.

In general, I don't see a big problem with heap when using interfaces: what prevents you from reusing them via sync.Pool?

Good point. But I am not sure if they are worth to be stored in sync.Pool. The Completed struct currently occupies only just 16 bytes. Wouldn't it be nice to avoid additional GC overhead?

Hi @mdigger,
Thank you very much for your suggestions. I have made Completed and Cacheable public in v0.0.99.
Though, I forget to pick your above commit into the latest version. Would you mind rebasing it and I pick it into the next release?

Thanks! There is no need.


Make the Entity class Select more informative

Actual version

Suggested solution

Reasoning:

a new user may have problem remembering all the entity typ codes

I endorse this.


RouteGuard Exception is not re-thrown

superseeds https://github.com/prooph/service-bus/pull/183
/cc @UFOMelkor

Coverage remained the same at 100.0% when pulling 66ddc26f226994fe27f45a9f0fa737079bfc19fb on fix-route-guard into a9b0a7e9d9ffb35cd7a716a552e543be177e171f on master.

Please give me 2 hours to evaluate another test case that came to my mind.

If I understand the logic of the finalize event correct, It's listeners should be always called. This would not be the case if the propagation is stopped but no exception has been thrown, only the first finalize listener is called:
    /**
     * @test
     */
    public function it_always_triggers_finalize_listeners_regardless_whether_the_propagation_of_the_event_has_been_stopped(): void
    {
        $messageBus = new CommandBus();

        $messageBus->attach(CommandBus::EVENT_DISPATCH, function (ActionEvent $event) {
            $event->setParam(CommandBus::EVENT_PARAM_MESSAGE_HANDLER, function () {
            });
        }, CommandBus::PRIORITY_LOCATE_HANDLER+1);
        $messageBus->attach(CommandBus::EVENT_DISPATCH, function (ActionEvent $event) {
            $event->stopPropagation();
        }, CommandBus::PRIORITY_INVOKE_HANDLER-1);

        $messageBus->attach(MessageBus::EVENT_FINALIZE, function () {
        }, 3);
        $finalizeHasBeenCalled = false;
        $messageBus->attach(MessageBus::EVENT_FINALIZE, function () use (&$finalizeHasBeenCalled) {
            $finalizeHasBeenCalled = true;
        }, 2);

        $messageBus->dispatch('a message');

        self::assertTrue($finalizeHasBeenCalled);
    }

If my assumption is correct, additional tests for the CommandBus, EventBus and QueryBus are necessary and the triggerFinalize method should be like
protected function triggerFinalize(ActionEvent $actionEvent): void
    {
        $actionEvent->setName(self::EVENT_FINALIZE);
        $actionEvent->stopPropagation(false);

        $this->events->dispatch($actionEvent);
    }

@UFOMelkor I added further tests

@UFOMelkor You're right, fixed!

LGTM 👍


chore: rename readme

Please describe the changes this PR makes and why it should be merged:
rename readme
Status and versioning classification:

@all-contributors please add @imranbarbhuiya  for code, maintenance, ideas


Service page: Sidebar Labels filter

This adds the sidebar labels filter to the Services Page.

Verified by @leemunroe ™
NOTES
I am having trouble getting the dropdown ellipsis styling to look right

[x] when using .text-overflow inside a dropdown element, a weird hover artifact can be seen:

[x] Integration tests pass locally

[x] how can we avoid having the persistent item (Labels) to show up inside of the open dropdown?

OUT OF SCOPE

[ ] at some point we'll have to introduce a hash map so we can avoid storing the full key/value label strings in the URL – with really long labels this may end up getting us into trouble – out of scope

Reviewer: @aldipower

@pierlo-upitup I hope you don't mind but I pushed a small commit that should fix the .text-overflow oddities and hides the persistent ID from the dropdown menu. See the commit for how I did it: https://github.com/dcos/dcos-ui/pull/433/commits/ec9c289e6e550fd56d452dd88e9a021335236503

Thank you @jfurrow !!!

Code looks too good to me. Please add some PHP.
Very good and understandable work.
Now I am doing a functionality test.

Filtering, selecting and so on works perfectly!
But there is a displaying problem of the dropdown-arrow in Firefox, Chrome works.

Done with review iteration 1.

And this is how it looks in Safari:

As I followed @MatApple's suggestion on the dropdown styling, I suspect we have the same problem everywhere we use the .dropdown-wide class at the minute. My suggestion is to address this in a separate PR.

OK, fine with addressing this separately.

Thanks for the review @aldipower – I also spotted a bug while refactoring the filtering code part and here's proof that everything works as it should:

Geil, Alter!

@mesosphere-ci retest this please

It also works with unicode 👍

It haz tests!

Which pass local


register CLI like a plugin/helper in getkirby.com plugin list

https://getkirby.com/search?q=cli&area=all does not show CLI tool yet.

or write a cookbook?

Added it over at https://github.com/getkirby/getkirby.com/issues/1900


New IDP sso/slo binding params which deprecate :embed_sign

Fixes #606
Adds settings.idp_sso_service_binding and settings.idp_slo_service_binding, and deprecates settings.security[:embed_sign]. If specified, new binding parameters will be used in place of :embed_sign to determine how to handle SAML message signing (HTTP-POST embeds signature and HTTP-Redirect does not.)
In addition:

The IDPMetadataParser parse, parse_to_hash and parse_to_array methods now retrieve
idp_sso_service_binding and idp_slo_service_binding.
For convenience you may now use the Symbol aliases :post and :redirect for any settings.*_binding parameter.
Many of the getters/setters in the Settings class had needlessly verbose code. I've cleaned them up.

@pitbulk ready for your review

Conflicts resolved

@pitbulk really appreciate the prompt response! Thank you!

Thank you for your recent contributions.


Translate tags too

The tags are currently only in one language:

Tags listed in the english version of the use page
I suggest to translate them too. We could use a lookup table for the tags for each language. If it has an entry the translated version is picked. When there is no entry for the selected language the native value is shown.

I am not sure if it is really necessary right now, because most of the tags should be readable (except eigentwickung oder schnittstelle).

@MrSebastian you are right, this is el bit mixed. we should use one language for tags, imho english.
So I suggest to translate eigenentwicklung with "inhouse" and schnittstelle with "interface".

I suggest to translate them too. We could use a lookup table for the tags for each language. If it has an entry the translated version is picked. When there is no entry for the selected language the native value is shown.

Thats a good enhancement.

next step is to refactor all existing tags:

eigenentwicklung ->inhouse
infrastruktur -> infrastructure
kooperation -> cooperation
refarchinfrastruktur -> refarchinfrastructure
schnittstelle -> interface
webanwendung -> webapp

I guess I can do it til the end of the week.
@FabianWilms @klml are there any other issues and branches that may produce a conflict?

I think most of these are already fixed in #28
There are currently two branches that were not merged becaues of this feature in which it should be integrated afterwords:

https://github.com/it-at-m/opensource.muenchen.de/tree/21-software-overview-own-page
https://github.com/it-at-m/opensource.muenchen.de/tree/22-show-tags-on-software-detail-page

It's done 👏


Make relatedInformation a Maybe List to match the spec

The specification defines relatedInformation as optional, so this makes it a Maybe type. This fixes HIE with Visual Studio Code

haskell-ide-engine also needs some fixes for this API change so a new version of this might need to be published


Add Subaru XV fingerprint

Added Subaru XV Active 2018 fingerprint to values.py. Tested with my car, custom subaru wiring harness and https://github.com/martinl/openpilot/tree/subaru-devel2
PS. I also noticed bounty offer in selfdrive/car/car_helpers.py, I would like to use the bounty

@martinl , as is, this PR is incomplete. You also need to modify interface.py and any other file that has car model dependencies. Since it seems like you have the port properly working, could you please also add the rest of the changes to this PR?

I will create new PR based on current devel


Windows: Helm Install with Remote URL doesn't Work

helm version

Client: &version.Version{SemVer:"v2.7.2", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.7.2", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"}

helm install https://github.com/Azure/aci-connector-k8s/raw/master/charts/aci-connector.tgz --name aci-conn-robbie --debug

[debug] Created tunnel using local port: '2117'
[debug] SERVER: "<IP_ADDRESS>:2117"
[debug] Original chart version: ""
Error: no cached repo found. (try 'helm repo update'). open C:\Users\junjiez.helm\repository\cache\local-index.yaml: The system cannot find the file specified.

The chart exists. I download it locally, and run "helm install" against the local file it works.

Hey @robbiezhang, can you first try to run helm init --client-only first before running helm install?

yes, I tried to delete ~/.helm, and helm init --client-only and helm repo update, but I still get the error.
I finally find a workaround. I notice that C:\Users\[user]\.helm\repository\cache\local-index.yaml doesn't exist. After I copy an empty index there, it works for me.
It looks like a bug in the helm init or helm repo update, since they should create the file for me.

Yeha this could be related to some other windows-related bugs we saw a few releases back. I'll tack this onto #2456.

interesting... This same error popped up in https://github.com/kubernetes/helm/issues/2071 as well. I'll see if I can re-validate that bug. If so then we'll re-open that one and close this out as a duplicate.

closing as a duplicate of #2071. I've gone ahead and re-opened that issue. Thank you for the report, @robbiezhang!


Resolved issue #295.

Incorrect variable 'project' was changed to the correct variable 'team'.  Now, when creating a team, it should automatically show the new team that was added.

Codecov Report

:exclamation: No coverage uploaded for pull request base (master@ae86414). Click here to learn what that means.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master     #309   +/-   ##
=========================================
  Coverage          ?   77.16%
  Complexity        ?      241
=========================================
  Files             ?       84
  Lines             ?      797
  Branches          ?        0
=========================================
  Hits              ?      615
  Misses            ?      182
  Partials          ?        0

Continue to review full report at Codecov.

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

@cdterry87 you created the pr against master branch, it should be against dev branch. you can change the branch by clicking the edit button and then change the base branch from the left dropdown

@cdterry87 you created the pr against master branch, it should be against dev branch. you can change the branch by clicking the edit button and then change the base branch from the left dropdown

Sorry about that, I just changed the base branch to dev.