org.opensearch.plugin:opensearch-dashboards:2.3.0 has issues with opensearch-dashboards unit test

Describe the bug
[root@b41ffec59270 OpenSearch]# ./gradlew :modules:opensearch-dashboards:test

Configure project :qa:os
Cannot add task 'destructiveDistroTest.docker' as a task with that name already exists.
=======================================
OpenSearch Build Hamster says Hello!
Gradle Version        : 7.5.1
OS Info               : Linux 5.4.17-2136.308.9.el8uek.x86_64 (amd64)
JDK Version           : 17 (Oracle JDK)
JAVA_HOME             : /opt/jdk-17.0.8
Random Testing Seed   : C3AA90B6B5DFCDE6
In FIPS 140 mode      : false
=======================================

Task :modules:opensearch-dashboards:test
OpenJDK 64-Bit Server VM warning: Ignoring option --illegal-access=warn; support was removed in 17.0

org.opensearch.dashboards.OpenSearchDashboardsPluginTests > classMethod FAILED
java.lang.RuntimeException: can not run opensearch as root
Exception in thread "Thread-4" java.lang.NoClassDefFoundError: Could not initialize class org.opensearch.test.OpenSearchTestCase
at org.opensearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:124)
at org.opensearch.bootstrap.BootstrapForTesting.(BootstrapForTesting.java:105)
at java.base/java.lang.Thread.run(Thread.java:833)
at org.opensearch.test.OpenSearchTestCase.(OpenSearchTestCase.java:257)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:467)
at com.carrotsearch.randomizedtesting.RandomizedRunner$2.run(RandomizedRunner.java:623)
Suppressed: java.lang.IllegalStateException: No context information for thread: Thread[id=32, name=Thread-4, state=RUNNABLE, group=TGRP-OpenSearchDashboardsPluginTests]. Is this thread running under a class com.carrotsearch.randomizedtesting.RandomizedRunner runner context? Add @RunWith(class com.carrotsearch.randomizedtesting.RandomizedRunner.class) to your test class. Make sure your code accesses random contexts within @BeforeClass and @AfterClass boundary (for example, static test class initializers are not permitted to access random contexts).
at com.carrotsearch.randomizedtesting.RandomizedContext.context(RandomizedContext.java:249)
at com.carrotsearch.randomizedtesting.RandomizedContext.current(RandomizedContext.java:134)
at com.carrotsearch.randomizedtesting.RandomizedRunner.augmentStackTrace(RandomizedRunner.java:1885)
at com.carrotsearch.randomizedtesting.RunnerThreadGroup.uncaughtException(RunnerThreadGroup.java:20)
at java.base/java.lang.Thread.dispatchUncaughtException(Thread.java:2008)
Suite: Test class org.opensearch.dashboards.OpenSearchDashboardsPluginTests
2> java.lang.RuntimeException: can not run opensearch as root
at org.opensearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:124)
at org.opensearch.bootstrap.BootstrapForTesting.(BootstrapForTesting.java:105)
at org.opensearch.test.OpenSearchTestCase.(OpenSearchTestCase.java:257)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:467)
at com.carrotsearch.randomizedtesting.RandomizedRunner$2.run(RandomizedRunner.java:623)
OpenJDK 64-Bit Server VM warning: Ignoring option --illegal-access=warn; support was removed in 17.0
org.opensearch.dashboards.OpenSearchDashboardsPluginTests > classMethod FAILED
java.lang.RuntimeException: can not run opensearch as root
at org.opensearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:124)
at org.opensearch.bootstrap.BootstrapForTesting.(BootstrapForTesting.java:105)
at org.opensearch.test.OpenSearchTestCase.(OpenSearchTestCase.java:257)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:467)
at com.carrotsearch.randomizedtesting.RandomizedRunner$2.run(RandomizedRunner.java:623)
Suite: Test class org.opensearch.dashboards.OpenSearchDashboardsPluginTests
2> java.lang.RuntimeException: can not run opensearch as root
at org.opensearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:124)
at org.opensearch.bootstrap.BootstrapForTesting.(BootstrapForTesting.java:105)
at org.opensearch.test.OpenSearchTestCase.(OpenSearchTestCase.java:257)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:467)
at com.carrotsearch.randomizedtesting.RandomizedRunner$2.run(RandomizedRunner.java:623)
Exception in thread "Thread-4" java.lang.NoClassDefFoundError: Could not initialize class org.opensearch.test.OpenSearchTestCase
at java.base/java.lang.Thread.run(Thread.java:833)
Suppressed: java.lang.IllegalStateException: No context information for thread: Thread[id=32, name=Thread-4, state=RUNNABLE, group=TGRP-OpenSearchDashboardsPluginTests]. Is this thread running under a class com.carrotsearch.randomizedtesting.RandomizedRunner runner context? Add @RunWith(class com.carrotsearch.randomizedtesting.RandomizedRunner.class) to your test class. Make sure your code accesses random contexts within @BeforeClass and @AfterClass boundary (for example, static test class initializers are not permitted to access random contexts).
at com.carrotsearch.randomizedtesting.RandomizedContext.context(RandomizedContext.java:249)
at com.carrotsearch.randomizedtesting.RandomizedContext.current(RandomizedContext.java:134)
at com.carrotsearch.randomizedtesting.RandomizedRunner.augmentStackTrace(RandomizedRunner.java:1885)
at com.carrotsearch.randomizedtesting.RunnerThreadGroup.uncaughtException(RunnerThreadGroup.java:20)
at java.base/java.lang.Thread.dispatchUncaughtException(Thread.java:2008)
OpenJDK 64-Bit Server VM warning: Ignoring option --illegal-access=warn; support was removed in 17.0
org.opensearch.dashboards.OpenSearchDashboardsPluginTests > classMethod FAILED
java.lang.RuntimeException: can not run opensearch as root
at org.opensearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:124)
at org.opensearch.bootstrap.BootstrapForTesting.(BootstrapForTesting.java:105)
at org.opensearch.test.OpenSearchTestCase.(OpenSearchTestCase.java:257)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:467)
at com.carrotsearch.randomizedtesting.RandomizedRunner$2.run(RandomizedRunner.java:623)
Suite: Test class org.opensearch.dashboards.OpenSearchDashboardsPluginTests
2> java.lang.RuntimeException: can not run opensearch as root
at org.opensearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:124)
at org.opensearch.bootstrap.BootstrapForTesting.(BootstrapForTesting.java:105)
at org.opensearch.test.OpenSearchTestCase.(OpenSearchTestCase.java:257)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:467)
at com.carrotsearch.randomizedtesting.RandomizedRunner$2.run(RandomizedRunner.java:623)
Exception in thread "Thread-4" java.lang.NoClassDefFoundError: Could not initialize class org.opensearch.test.OpenSearchTestCase
at java.base/java.lang.Thread.run(Thread.java:833)
Suppressed: java.lang.IllegalStateException: No context information for thread: Thread[id=32, name=Thread-4, state=RUNNABLE, group=TGRP-OpenSearchDashboardsPluginTests]. Is this thread running under a class com.carrotsearch.randomizedtesting.RandomizedRunner runner context? Add @RunWith(class com.carrotsearch.randomizedtesting.RandomizedRunner.class) to your test class. Make sure your code accesses random contexts within @BeforeClass and @AfterClass boundary (for example, static test class initializers are not permitted to access random contexts).
at com.carrotsearch.randomizedtesting.RandomizedContext.context(RandomizedContext.java:249)
at com.carrotsearch.randomizedtesting.RandomizedContext.current(RandomizedContext.java:134)
at com.carrotsearch.randomizedtesting.RandomizedRunner.augmentStackTrace(RandomizedRunner.java:1885)
at com.carrotsearch.randomizedtesting.RunnerThreadGroup.uncaughtException(RunnerThreadGroup.java:20)
at java.base/java.lang.Thread.dispatchUncaughtException(Thread.java:2008)
OpenJDK 64-Bit Server VM warning: Ignoring option --illegal-access=warn; support was removed in 17.0
Exception in thread "Thread-4" java.lang.NoClassDefFoundError: Could not initialize class org.opensearch.test.OpenSearchTestCase
at java.base/java.lang.Thread.run(Thread.java:833)
Suppressed: java.lang.IllegalStateException: No context information for thread: Thread[id=32, name=Thread-4, state=RUNNABLE, group=TGRP-OpenSearchDashboardsPluginTests]. Is this thread running under a class com.carrotsearch.randomizedtesting.RandomizedRunner runner context? Add @RunWith(class com.carrotsearch.randomizedtesting.RandomizedRunner.class) to your test class. Make sure your code accesses random contexts within @BeforeClass and @AfterClass boundary (for example, static test class initializers are not permitted to access random contexts).
at com.carrotsearch.randomizedtesting.RandomizedContext.context(RandomizedContext.java:249)
at com.carrotsearch.randomizedtesting.RandomizedContext.current(RandomizedContext.java:134)
at com.carrotsearch.randomizedtesting.RandomizedRunner.augmentStackTrace(RandomizedRunner.java:1885)
at com.carrotsearch.randomizedtesting.RunnerThreadGroup.uncaughtException(RunnerThreadGroup.java:20)
at java.base/java.lang.Thread.dispatchUncaughtException(Thread.java:2008)
org.opensearch.dashboards.OpenSearchDashboardsPluginTests > classMethod FAILED
java.lang.RuntimeException: can not run opensearch as root
at org.opensearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:124)
at org.opensearch.bootstrap.BootstrapForTesting.(BootstrapForTesting.java:105)
at org.opensearch.test.OpenSearchTestCase.(OpenSearchTestCase.java:257)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:467)
at com.carrotsearch.randomizedtesting.RandomizedRunner$2.run(RandomizedRunner.java:623)
Suite: Test class org.opensearch.dashboards.OpenSearchDashboardsPluginTests
2> java.lang.RuntimeException: can not run opensearch as root
at org.opensearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:124)
at org.opensearch.bootstrap.BootstrapForTesting.(BootstrapForTesting.java:105)
at org.opensearch.test.OpenSearchTestCase.(OpenSearchTestCase.java:257)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:467)
at com.carrotsearch.randomizedtesting.RandomizedRunner$2.run(RandomizedRunner.java:623)
Tests with failures:

org.opensearch.dashboards.OpenSearchDashboardsPluginTests.classMethod

4 tests completed, 4 failed

Task :modules:opensearch-dashboards:test FAILED

FAILURE: Build failed with an exception.
Related component
Other
To Reproduce
Execution failed for task ':modules:opensearch-dashboards:test'.
Expected behavior
Execution failed for task ':modules:opensearch-dashboards:test'.
Additional Details
Plugins
Please list all plugins currently enabled.
Screenshots
If applicable, add screenshots to help explain your problem.
Host/Environment (please complete the following information):

OS: [e.g. iOS]
Version [e.g. 22]

Additional context
Add any other context about the problem here.

The error says java.lang.RuntimeException: can not run opensearch as root, does not running as root work?

Before getting the above error noticed this output
[10 04:27:06.103] | Cannot add task 'destructiveDistroTest.docker' as a task with that name already exists.
[10 04:27:13.302] | =======================================
[10 04:27:13.302] | OpenSearch Build Hamster says Hello!
[10 04:27:13.302] | Gradle Version        : 7.5.1
[10 04:27:13.302] | OS Info               : Linux 5.4.17-2136.308.9.el8uek.x86_64 (amd64)
[10 04:27:13.303] | JDK Version           : 17 (Oracle JDK)
[10 04:27:13.303] | JAVA_HOME             : /opt/jdk-17.0.8
[10 04:27:13.303] | Random Testing Seed   : AA17E5D2962EE45F
[10 04:27:13.303] | In FIPS 140 mode      : false
[10 04:27:13.303] | =======================================
[10 04:27:13.303] |
[10 04:27:13.303] | FAILURE: Build failed with an exception.
[10 04:27:13.303] |
[10 04:27:13.303] | * What went wrong:
[10 04:27:13.304] | Docker (checked [/usr/bin/docker, /usr/local/bin/docker]) is required to run the following tasks:
[10 04:27:13.304] | :distribution:docker:buildArm64DockerImage
[10 04:27:13.304] | :distribution:docker:buildDockerImage
[10 04:27:13.304] | you can address this by attending to the reported issue, or removing the offending tasks from being executed.
[10 04:27:13.304] |
[10 04:27:13.304] | * Try:
[10 04:27:13.304] | > Run with --info or --debug option to get more log output.
[10 04:27:13.305] |
[10 04:27:13.305] | * Exception is:
[10 04:27:13.305] | org.gradle.api.GradleException: Docker (checked [/usr/bin/docker, /usr/local/bin/docker]) is required to run the following tasks:
[10 04:27:13.305] | :distribution:docker:buildArm64DockerImage
[10 04:27:13.305] | :distribution:docker:buildDockerImage
[10 04:27:13.305] | you can address this by attending to the reported issue, or removing the offending tasks from being executed.
[10 04:27:13.305] | at org.opensearch.gradle.docker.DockerSupportService.throwDockerRequiredException(DockerSupportService.java:303)
[10 04:27:13.305] | at org.opensearch.gradle.docker.DockerSupportService.throwDockerRequiredException(DockerSupportService.java:299)
[10 04:27:13.306] | at org.opensearch.gradle.docker.DockerSupportService.failIfDockerUnavailable(DockerSupportService.java:170)
[10 04:27:13.306] | at org.opensearch.gradle.docker.DockerSupportPlugin.lambda$apply$3(DockerSupportPlugin.java:76)
[10 04:27:13.306] | at jdk.internal.reflect.GeneratedMethodAccessor690.invoke(Unknown Source)
[10 04:27:13.306] | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[10 04:27:13.306] | at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingInvocationHandler$1.lambda$run$0(DefaultListenerBuildOperationDecorator.java:255)
[10 04:27:13.306] | at org.gradle.configuration.internal.DefaultUserCodeApplicationContext$CurrentApplication.reapply(DefaultUserCodeApplicationContext.java:98)
[10 04:27:13.306] | at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingInvocationHandler$1.run(DefaultListenerBuildOperationDecorator.java:253)
[10 04:27:13.306] | at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
[10 04:27:13.306] | at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
[10 04:27:13.306] | at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
[10 04:27:13.306] | at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
[10 04:27:13.307] | at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
[10 04:27:13.307] | at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
[10 04:27:13.307] | at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
[10 04:27:13.307] | at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
[10 04:27:13.307] | at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingInvocationHandler.invoke(DefaultListenerBuildOperationDecorator.java:250)
[10 04:27:13.307] | at jdk.proxy1/jdk.proxy1.$Proxy79.graphPopulated(Unknown Source)
[10 04:27:13.307] | at jdk.internal.reflect.GeneratedMethodAccessor690.invoke(Unknown Source)
[10 04:27:13.307] | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[10 04:27:13.307] | at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
[10 04:27:13.307] | at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
[10 04:27:13.307] | at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:43)
[10 04:27:13.307] | at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:245)
[10 04:27:13.307] | at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:157)
[10 04:27:13.308] | at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:61)
[10 04:27:13.308] | at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:346)
[10 04:27:13.308] | at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:249)
[10 04:27:13.308] | at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:141)
[10 04:27:13.308] | at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37)
[10 04:27:13.308] | at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
[10 04:27:13.308] | at jdk.proxy1/jdk.proxy1.$Proxy79.graphPopulated(Unknown Source)
[10 04:27:13.308] | at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$NotifyTaskGraphWhenReady.run(DefaultTaskExecutionGraph.java:371)

[Triage - attendees 1 2 3 4]
@swaruparameshpajju Thanks for filing this issue, it looks like this is due to trying to run tasks without docker installed:
[10 04:27:13.303] | * What went wrong:
[10 04:27:13.304] | Docker (checked [/usr/bin/docker, /usr/local/bin/docker]) is required to run the following tasks:
[10 04:27:13.304] | :distribution:docker:buildArm64DockerImage
[10 04:27:13.304] | :distribution:docker:buildDockerImage
[10 04:27:13.304] | you can address this by attending to the reported issue, or removing the offending tasks from being executed.
[10 04:27:13.304] |

can u give me how to explicitly remove the task which is not required to execute. currently iam running using the command
[root@b41ffec59270 OpenSearch]# ./gradlew :modules:opensearch-dashboards:test
after git clone to repository

@swaruparameshpajju i think the public slack #dev channel is better suited for questions like these, give it a try?
https://opensearch.org/slack.html
Closing this for now since it doesn't look like a bug in the scripts.


Need to implement decryptree function

Im on it but face to this problem https://github.com/Monas-project/frontend/issues/8


Update metadata.json

Nothing major just bumping to the Gnome version 47.

Better update is like this:
"shell-version": [
"46",
"47"
],
Because it works on both versions of Gnome.


Automated cherry pick of #5388: fix: keystone prefers internal endpoint type

Cherry pick of #5388 on release/3.0.
#5388: fix: keystone prefers internal endpoint type

Codecov Report

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

@@              Coverage Diff              @@
##             release/3.0   #5390   +/-   ##
=============================================
  Coverage               ?   6.87%
=============================================
  Files                  ?     535
  Lines                  ?   91082
  Branches               ?       0
=============================================
  Hits                   ?    6262
  Misses                 ?   84299
  Partials               ?     521

Flag
Coverage Δ

#aFlag
6.87% <ø> (?)

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 90008ff...12ce1a0. Read the comment docs.


Tooltip positioning

tooltip positioning seem a bit erratic, the first position is probably not always right. An way to reproduce is to flex two charts next to each other, the second chart has the tooltip  displaced by the width of the first chart:

(on the screenshot the mouse is over the second chart)
@runn-vermel maybe you can have a look since you're in there?

Fixed this one but leaving it open since I think we can make the positioning more reactive. At the moment we calculate all values needed to be displayed in the tooltip, then fire an event to update the tooltip content and position.
When calculation is a bit slow (lot of data) we can end up with the cursor over the tooltip, hence "breaking" the mouseover over the svg rect.
we could try to update the tooltip position before doing the calculations and adding some small timeouts in the middle of calculations to allow for processing of mouse events. This might involve adding a queuing/debouncing mechanism on the calculation part of the tooltip

Actual positioning still broken in certain situations. See interactive demo for XY for example. Might need to use relative positioning

Fixed positioning FOR GOOD. Still small sizing issue when the data is very long, the tooltip wraps the text but will get smaller when "hitting" the right size of the chart if chart is embedded within a flex container


Fix wrong string length in REMOVE macro

The sizeof operator returns number of chars + \0, but remove_string() expects only number of characters

I should've caught that, given I wrote the REMOVE_CONST_STRING macro in the first place. Thanks for catching this.


SocketIO failed to connect to external redis

Hi.
Since 12.5, SocketIO failed to connectal to an external redis :
{"error":{"errno":-111,"code":"ECONNREFUSED","syscall":"connect","address":"<IP_ADDRESS>","port":6379},"level":"error","message":"uncaughtException: Redis connection to <IP_ADDRESS>:6379 failed - connect ECONNREFUSED <IP_ADDRESS>:6379\nError: connect ECONNREFUSED <IP_ADDRESS>:6379\n    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1494:16)","stack":"Error: connect ECONNREFUSED <IP_ADDRESS>:6379\n    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1494:16)","exception":true,"date":"Mon Aug 21 2023 12:24:25 GMT+0000 (Coordinated Universal Time)","process":{"pid":40402,"uid":104,"gid":107,"cwd":"/var/www/onlyoffice/Services/ASC.Socket.IO","execPath":"/usr/bin/node","version":"v18.16.0","argv":["/usr/bin/node","/var/www/onlyoffice/Services/ASC.Socket.IO/app.js","UNIX.SERVER"],"memoryUsage":{"rss":83001344,"heapTotal":33427456,"heapUsed":21128256,"external":1286650,"arrayBuffers":386461}},"os":{"loadavg":[3.57,1.87,1.17],"uptime":1809950.46},"trace":[{"column":16,"file":"node:net","function":"TCPConnectWrap.afterConnect [as oncomplete]","line":1494,"method":"afterConnect [as oncomplete]","native":false}]}
2023-08-21 12:24:25 - error: uncaughtException: Redis connection to <IP_ADDRESS>:6379 failed - connect ECONNREFUSED <IP_ADDRESS>:6379
Error: connect ECONNREFUSED <IP_ADDRESS>:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1494:16)

Parameters used in docker-compose.yml :
- REDIS_SERVER_HOST=onlyoffice-redis-server
- REDIS_SERVER_CACHEPORT=6379
- REDIS_SERVER_DATABASE=1

My 2 cents :
the process is launched with UNIX.SERVER as parameter :
● onlyofficeSocketIO.service - ONLYOFFICE SocketIO Service
     Loaded: loaded (/lib/systemd/system/onlyofficeSocketIO.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-08-21 14:59:26 CEST; 2s ago
    Process: 48464 ExecStartPre=/bin/bash -c rm -f /tmp/onlyofficeSocketIO (code=exited, status=0/SUCCESS)
   Main PID: 48465 (node)
      Tasks: 11 (limit: 7342)
     Memory: 43.5M
        CPU: 602ms
     CGroup: /system.slice/docker-6c34e89da0d4ebf26ca8b0c3bb77f4dce2ddd71d6c74f6408e582332ca7f1c09.scope/system.slice/onlyofficeSocketIO.service
             └─48465 /usr/bin/node /var/www/onlyoffice/Services/ASC.Socket.IO/app.js UNIX.SERVER

In /var/www/onlyoffice/Services/ASC.Socket.IO/config folder, there are 2 config files :

config.json : filled with the correct parameters
config.UNIX.SERVER.json : seems to contain default parameters (and localhost as redis host)

Not sure, but either the entrypoint populates the wrong file or SocketIO process is started with the wrong parameter.
Thanks for your help !
Yoann.

Hello @ydelattre Sorry, but we don't provide instructions for connecting an external Redis server. I think you should edit the config file and change the Redis host to your own.


Remaining Budget on Second Brain

Instead of showing it on the app over the second brain WebViews, app should notify Second Brain using the bridge and the Second Brain webpage should show it integrated in the design
Task
The Remaining Budget in secondbrain is showing on the app over second brain webview.
This should be sent from the app to second brain and the second brain should show it.
Both the budget setting popup modal and the budget itself is displayed by the host app:

We need to send the remaining balance from the app to SB via bridge
We can remove the frontend UI from host apps
Implement set budget modal here
Implement budget based on SB design here

@tomastiminskas I can take this. It seems like it would be as simple as sending the correct message using the sendMessage function in WebAppHelper.
Does Second Brain already have a parameter that it is looking for regarding budget or do we need to make updates to second brain as well before this is possible?

I don't think Second Brain is already supporting this, so you should talk to @kevkevinpal or someone on that side to work on this together. App should send the remaining budget to SB via bridge and SB should show it as part of the web UI. We might need some designs from @Antanasijevic for that

Ok it seems like the relay may already have this information so it would be a matter of either calling an additional API or making sure that the relay syncs with SB.  I am looking here:

And I see the existing chain of events goes something like:
didReceiveMessage -> saveGraphData ->  API.saveGraphData (calls action_history endpoint) -> sendLsatResponse -> update Remaining Budget UI.
So it appears there's already a chain of events that syncs the relay & the application

@kevkevinpal I took a look at this and I think it doesn't make sense to have the client track the budget. If it does, it leaves the possibility of abuse (imagine a deadbeat that just writes JS that says he always has a sufficient budget).
Instead SecondBrain should track the budget and either provide an endpoint for the client to query or better yet just display the information itself.
Once that is live I can make the necessary adjustments to see this through to completion.

@kevkevinpal circling back to this. I think this warrants a brief call. Let's pick a day in the next few business days to hash out a strategy.

@uncleJim21 I might be wrong but @tobi-bams was taking care of it. We already remove the label from sphinx app and he implemented a new message type between app and web view using the js bridge, so now SB will ask the app for the remaining budget and it will be shown as part of the web.

@uncleJim21 I might be wrong but @tobi-bams was taking care of it. We already remove the label from sphinx app and he implemented a new message type between app and web view using the js bridge, so now SB will ask the app for the remaining budget and it will be shown as part of the web.

Exactly, this is how we have it implemented.


Implement Embeddings + restructure services

Looks like mostly package refactoring and extracting common methods, right? If there's something deeper let me know so I can take a better look!

Yeah, mostly what you said. I also added automated embeddings.


Update powered by page

Hi,
As Softtech we have implemented Pulsar in production for IYS project and managing 1B messages daily via Pulsar. We are working on a new project to transfer Is Bank Turkey to Pulsar. Would be glad to share Softtech Logo in Powered By page.
Best

(If this PR fixes a github issue, please add Fixes #<xyz>.)
Fixes #
(or if this PR is one task of a github issue, please add Master Issue: #<xyz> to link to the master issue.)
Master Issue: #
Motivation
Explain here the context, and why you're making that change. What is the problem you're trying to solve.
Modifications
Describe the modifications you've done.
Verifying this change

[x] Make sure that the change passes the CI checks.

(Please pick either of the following options)
This change is a trivial rework / code cleanup without any test coverage.
(or)
This change is already covered by existing tests, such as (please describe tests).
(or)
This change added tests and can be verified as follows:
(example:)

Added integration tests for end-to-end deployment with large payloads (10MB)
Extended integration test for recovery after broker failure

Does this pull request potentially affect one of the following parts:
If yes was chosen, please highlight the changes

Dependencies (does it add or upgrade a dependency): (yes / no)
The public API: (yes / no)
The schema: (yes / no / don't know)
The default values of configurations: (yes / no)
The wire protocol: (yes / no)
The rest endpoints: (yes / no)
The admin cli options: (yes / no)
Anything that affects deployment: (yes / no / don't know)

Documentation

Does this pull request introduce a new feature? (yes / no)
If yes, how is the feature documented? (not applicable / docs / JavaDocs / not documented)
If a feature is not applicable for documentation, explain why?
If a feature is not documented yet in this PR, please create a followup issue for adding the documentation

@caladogan Thank you for doing that!


Session file occupied

I created a WinForm application. Now I need to operate on the saved session file, but the system prompts that the session file is occupied and cannot be operated. How can I close it and where can I close the opened session file.

The session file is in-use and updated as long as the client instance is up.
Call client.Dispose and then you can access the session file.
Remember also that you can choose the location and name of the session file by having your Config callback answer to session_pathname

Thanks.


ENH: add html report to physioqc

This issue serves as a discussion point for adding automated html reports to the physioqc pipeline. Please share your thoughts!
The idea
One the physioqc pipeline has done its thing, the output will be a bunch of processed timeseries and summary metric data. It would be great to see all of these presented in an easy to read, visual, and interactive report. The report will probably contain details such as:

some metadata about the pipeline run (date-time, name of bids dataset, some other bids metadata..., types of measures)
summary metrics in a table (with categorizations, per measure type or whatever other categories exist)
interactive graphs
any other information that we think is useful (perhaps a description of how each measure was caculated)

Existing work / relevant info
@smoia pointed me to this PR that aims to add html reports to phys2bids. If I understand it correctly, it uses an html template with some basic css, and python code to automate the process of writing the correct string values (mostly relative locations of figures, or strings) to variables in the template.
It could be an idea to make that report (once merged) compatible with the to-be-developed one for physioqc. Or to change the phys2bids one to make it compatible with whatever the physioqc report will become.
Framework suggestions
As simple as possible is probably a good starting point, to keep complexity down and encourage contributions.

Minimal would be similar to the phys2bids example: just an html template
For a bit better UX, we could add javascript for things like buttons, navbars, etc, and also for some client-side functions if useful.
Regarding interactive plots, my personal preference is Plotly, but bokeh seems to be a good alternative too. Plotly graphs can be generated with its Python API and exported to html, although this html (the code behind the graphs) is very very messy, which is why I would suggest generating the graphs in the browser using the Plotly JS API.
More complex and probably not needed, but adding a lot more possibilities for complex data, relationships, and reactivity: we could go with a framework such as VueJS (my personal preference) or ReactJS.

@smoia please tag anyone you think might want to contribute

Hi! I used Plotly to make interactive HTML reports for NeuroKit

PR: https://github.com/neuropsychology/NeuroKit/pull/707
Example report: https://danibene.github.io/neurokit2-ppg-report-example/myreport.html

Feel free to adapt or maybe we can find some way to work together as it's currently not implemented for all signals, just PPG

This looks great, thanks for the links! Working together on this sounds good to me :)


Handles PAY_AT_ payment type in bookings

Details

This PR has effects only with the Auth PR https://github.com/Expensify/Auth/pull/11860
It starts handling bookings that have payment due at the end booking date.
Fixed Issues

$ https://github.com/Expensify/Expensify/issues/410430
PROPOSAL:
Tests

Internal steps:

Build Auth against this PR https://github.com/Expensify/Auth/pull/11860
Setup a travel policy ./script/clitools.sh generator:policy --travel
Create some trip expenses with hotel and air bookings ./script/clitools.sh expensifytravel:trip

Common steps:

Verify the booking is split in two expenses
Verify the pending payment expense:

Has the correct pending explanation
Cannot be edited by the submitter
There is no payment button when looking at it from the admins point of view

Run Onyx.merge("report_1221890446199708", {"private_isArchived": true});
Verify the archived explanation and the pending explanation are correct

[x] Verify that no errors appear in the JS console

Offline tests

QA Steps

Let's just make sure the current flow is still working correctly after this changes

Book a trip
Verify the trip room is created and you get the correct expenses

[ ] Verify that no errors appear in the JS console

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:

[x] I verified that all the inputs inside a form are aligned with each other.
[x] I added Design label and/or tagged @Expensify/design so the design team can review the changes.

[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

Hey @Ollyws ping me on Slack whenever you are gonna test this so I can give you my dev environment and some credentials since the backend PR will HOLD on this one.

The archive icon here looks broken:

I updated the SVG but I think there is still something wrong? @dubielzyk-expensify

Updated to show the booking archived related pending messages only if the correct archived reason.

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

hmm, how did this pass the perf-tests check? Do they not run the same tests?

Note: This PR probably hasn't introduced the recession. The regression has been introduced at an earlier point, and the CI system will report any PR that follows this faulty PR as a regression.

🚀 Deployed to staging by https://github.com/arosiclair in version: 9.0.20-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

FYI I believe this was deployed to prod yesterday, from this checklist - #47356


True Colors values

Is there any plans to add access to the color value itself instead of the ACI which sometimes is not the exact color that is chosen in RGB ?

True color is supported as a separate field, if written.  For a drawing R2004 or greater, this is a i32 value on the common entity properties, e.g.,
let my_entity = drawing.entities()....; // get the entity
let true_color = my_entity.common.color_24_bit; // i32 with the true color

Note that the field must be present in the DXF file, otherwise it defaults to 0, and if you're saving a file and setting this field, you'll have to write it as R2004 or greater, e.g.,
let mut drawing = Drawing::new();
drawing.header.version = AcadVersion::R2004;
// ... add the entity and set the color_24_bit field


Contribution

A contribution.

This pull request introduces 2 alerts when merging 9d1e58f467c69b009857d6f15a410e9ebaff83dd into 1413cc0e23260c0aba349271b52b81749473f1ee - view on lgtm.com
new alerts:

1 for Type mismatch on container modification
1 for Dereferenced variable is always null

Comment posted by lgtm.com


examples: Update per Priority changes

 error: lint `clippy::derive_hash_xor_eq` has been renamed to `clippy::derived_hash_with_manual_eq`
 --> gtk/src/lib.rs:8:10
  |
8 | #![allow(clippy::derive_hash_xor_eq)]
  |          ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::derived_hash_with_manual_eq`
  |
  = note: `-D renamed-and-removed-lints` implied by `-D warnings`


Failed to normalize projection

This code is currently triggering a bug
struct S<T> {
    f: T,
}

fn test00<T>(x: S<T>, y: S<T>) -> S<T>
where
    S<T>: std::ops::Mul<Output = S<T>>,
{
    x * y
}

error[E0999]: uh-oh: the code triggered a bug in Flux
  --> attic/playground.rs:10:1
   |
10 | }
   | ^
-Ztrack-diagnostics: created at crates/flux-refineck/src/checker.rs:1589:40
   |
   = note: incompatible types: `<S<T> as Mul<S<T>>>::Output` - `S<T>`

The issue is that we are failing to normalize the output of x * y to S<T>.
Maybe related to #697

I think (one of) the issue(s) is that we are not correctly converting generic arguments for trait projections here https://github.com/flux-rs/flux/blob/main/crates/flux-fhir-analysis/src/conv/mod.rs/#L525


update-application_ports.md revamp of #262

What this PR does / why we need it:
Add a bridge/host  column to show if the application utilizes the host or bridge network by default.  Fleshes out the applications and ports a bit more.
Which issue (if any) this PR fixes:
Fixes #262
Any other useful info:

Nice! 👍


consolidate setup.py and setup.cfg

redundant code in these two modules

test command:
python -m build --sdat
package version must be manually updated in thermostatsupervisor/init.py


Revert "Revert "Add additional checks to detect if operator is running (#202)""

Reverts open-cluster-management/policy-collection#206
The original goal in reverting the policy changes was to fix tests in the canaries (tests that had also been updated). However, the tests hadn't actually arrived in the canaries when the change was reverted, so after these changes were reverted the canaries also failed. Restoring the original change should make all tests pass again.

@dhaiducek could you please provide a little more context in the PR description?

Description updated

/lgtm


Ability to check whether Qonversion has been initialized

It would be nice to have the ability to check whether the framework has been initialized.
My use case is that I use checkEntitlements when the user returns to the app, and in some edge cases the user apparently puts the app in background before the initialization completes, then comes back to it and the checkEntitlements is triggered.
I can work around the problem and it's not that problematic, but could come in handy to have a quick way to check in some other cases. Plus if I understand it correctly it should be just a matter of exposing something like:
abstract class Qonversion {
  ...
  static bool get isInitialized => _backingInstance != null
  ...
}

Hi @LorTos
Thanks for the request.
I'll add this to our feature requests list and let you know when we implement it!

By the way, here is our public list of feature requests.

Uh good to know! I'll add it there next time, thanks!


Implement get_open_id_token

Introduce the CognitoIdentity's GetOpenIDToken endpoint to retrieve a
JWT tuple from Cognito's Identity Pool for a given IdentityId.
This implements feature #2310

Coverage decreased (-0.2%) to 92.942% when pulling 7c17fcd21d1ee09bce1c12d31c1a631af1d062ec on caguado:fix/2310 into 9acdc59aa4ec54e2b995a4793503513e0b0dc055 on spulec:master.

Looking at the error message I'm not sure why tests fail on moto_server (never used it). I'm rerunning tests with in my local env to try to reproduce.

I found an issue on the handling of unsigned requests inside moto/server.py, adding an additional commit to address it.

Looks great; thanks!


ddpm_prune.py errored out at step 249

Hello there, thank you for the interesting work!
I was following the readme to learn about your method. While running step 1, it errored out at this line with message RuntimeError: shape '[1, -1, 1, 192]' is invalid for input of size 45824. It only happened at step 249/1000, prior steps were fine. Wonder if you face this or have some idea about this. Thank you!

Hi, @vuiseng9. The training works well on my side.

BTW, my environment:
pytorch==1.12.1
torchvision==0.13.1


SASInterstitialView.h not found

Lexical or preprocessor issue:
    SASInterstitialView.h not found

Please, help me :(

Hello @francocorreasosa, can you please give us a little bit more information and context ?
As I see it, you are using mediation but forgot the include the Smart Ad Server SDK.
Thank you.

Just fixed it, I just restarted Xcode.
Thanks anyway.


Torrent Icon

Folder Category: Torrent related containers
Animation Suggestion: white portion slides over to spotlight the logo before exiting
File: torrent.zip

I don't think this icon represents this category very well since I don't think anyone on unraid is using utorrent

I agree.... I will do some thinking.....

I think I came up with a really good concept. It may be a little tedious to animate, but here it goes.

The layout I created consists of 3 layers, background, letters, and then a grid of squares. The grid of square starts as a complete mask over the letters. The each square is individually animated to disappear and reveal the letters underneath. This in essence mimics the concept on a torrent where little bits are randomly downloaded to create the full download. I though of using a "file" icon as the reveal, but it is not obvious enough; thus the word "torrent"
Please advise.
torrent.zip

This is a good idea. I'm going to try animating it right now.

Added in df86dda6c4591df6c7acb3759d58018fa846cd07

Almost there. Two suggestions. Eliminate the black strokes. And keep “torrent” on for additional time before wiping away. Very nicely done!

ok, I will reopen and make those changes

Fixes in 267716e5b57db94eb1e6f33caddef2691e1aeb7f


added thousand separator

Hi, Thanks for the good job
I added a simple thousands separator and also updated the readme to reflect the changes in my fork and I thought to share this small change as well, this makes it much more readable .
anyways here it is.

Neat. Thanks for adding that.


Kmail message viewer prohibits cut/copy

Expected behavior
Long press on message window selects text.
Actual behavior
Cut and copy disabled
Steps to reproduce
1.view message
2.long press anywhere in message
3.
Environment
K-9 Mail version:
Android version:
Account type (IMAP, POP3, WebDAV/Exchange):

We use a system component for displaying the message contents. If the copy functionality is not showing for you that's most likely an issue with your OS, not K-9 Mail.

No other email client has this issue.  I have to his reply to gain cut and copy capability so it is clearly not an Oscar issue.

No other email client has this issue.  I have to his reply to gain cut and copy capability so it is clearly not an Oscar issue.

Please reopen.
On May 1, 2018 12:52:29 PM MDT, cketti<EMAIL_ADDRESS>wrote:

We use a system component for displaying the message contents. If the
copy functionality is not showing for you that's most likely an issue
with your OS, not K-9 Mail.
--
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub:
https://github.com/k9mail/k-9/issues/3368#issuecomment-385755729

--
Sent from my Android phone with K-9 Mail. Please excuse my brevity.

We're not doing anything to deliberately disable the copy functionality. It's working on all of my devices. You didn't post any information about which K-9 Mail version you're using, what device you're using, or what OS version. If you have any concrete information on what could be causing this we'll be happy to include a workaround. But I don't see any of the existing developers spending time on trying to find out why it's not working for you.

Sorry about the bother.
I just tested again and it worked.  Not sure what was different.
FYI:  kmail 5.403, android oreo 8.1, on a pixel 2.
----- Original Message -----

From: "cketti"<EMAIL_ADDRESS>To: "k9mail/k-9"<EMAIL_ADDRESS>Cc: "adamf663"<EMAIL_ADDRESS>"Author"<EMAIL_ADDRESS>Sent: Tuesday, May 1, 2018 1:08:41 PM
Subject: Re: [k9mail/k-9] Kmail message viewer prohibits cut/copy (#3368)

We're not doing anything to deliberately disable the copy functionality. It's
working on all of my devices. You didn't post any information about which K-9
Mail version you're using, what device you're using, or what OS version. If you
have any concrete information on what could be causing this we'll be happy to
include a workaround. But I don't see any of the existing developers spending
time on trying to find out why it's not working for you.
--
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub:
https://github.com/k9mail/k-9/issues/3368#issuecomment-385760132

Hi there. Forgive me if it seems I was making accusations. There is a line above my browser search line that says "Kmail message viewer prohibits cut/copy. Is..." It won't show and I can't get to the rest of it. I tried copying and pasting the link and it.        G gives error "404 Record not found ". The files I was trying to send were screenshots in .png format. At the top of my screen there is a message "Switch to Mobile version which is what I'm on. That's what I meant about this problem. They are on a PC emulating my Android. I downloaded another app called IP Connection List giving me all kinds of info. There is an export option, I'm going to try that.  Thanks guys. I'll send it under separate cover.


Fix log_response/2

After recent refactoring log_response/2 can also receive an unencoded JSON as part of the error message.

@eiri: Thank you for noticing the problem. Wouldn't it be better to call couch_util:json_encode(JsonObj) after we check dont_log_response?

@iilyak this sounds like micro-optimization, tbh, and leads to not the prettiest code, but if you insist -  sure, here we go.

+1

@eiri: I would disagree that it is a micro optimization. We would be doing json -> binary conversion for every request (which involves {json, Obj}) twice if it is coming from clustered interface.

+1 after cleaning up the history

@iilyak I once had a production system that was doing jiffy encoding of ~1Mb messages at rate about 80 msg/s without breaking a sweet, so I have my doubts about optimizing without measuring. On the other hand if anything couch core code taught me is to treasure functions, that I can grasp propose of just glancing over, instead of stopping and reading attentively.
Anyway, everyone's entitled to their own opinions, so that's a moot point. The PR squashed.


Add link to monthly menu

PDF link at the beginning of the event list.
Host on Google Drive or similar?

Done in https://github.com/renee-bar/renee-bar.github.io/pull/39


"User services" in OpenRC

It would be nice if users could have and handle their own services and runlevels.
Nowadays a lot of applications rely on services run as the current user (for example sound servers like PipeWire and PulseAudio are required to run multiple applications that play audio in a tradiitonal desktop configuration).
For comparison, Systemd provides users with a mechanism to have their services (units) run and supervised upon login. This is, in turn, used by many desktop environments and also daemons (PulseAudio, PipeWire, etc.)
Some other init systems, like Runit, have no concept of user services, but they can be easily "tricked" to effectively handle them (Example).
OpenRC does not have any concept of user services and it doesn't seem to be easily adaptable to handle them in a tricky way; the best an user can do is effectively modify some system services so that they are run under their user and group and then they can write a bunch of sudo rc-service <service> start lines on their .profile so that the services actually get started and supervised. This works but it is tricky and it requires the user to set a NOPASSWD rule for rc-service on their sudoers file, which makes for a security problem.
Hence, it is probably wiser to let OpenRC have a concept of user services, in a way or another; the proposed solution would be:

to write the init scripts in exactly the same way except that they will need to be declared as user services somewhere in the scripts themselves, maybe with a user_service (0 or 1, false or true) variable; and that variable, in turn, would conflict with the command_user one;
to have a separate folder to load init scripts from, namely ~/.config/init.d/, where there can be user services only;
to have a separate directory to effectively handle the OpenRC inner workings, like /run/user/<uid>/openrc that would more or less be of the same function and scope as the current /run/openrc directory;
to have commands like rc-service and rc-update understand if they are being run as root or as user, to check whether there is a 'user' instance of OpenRC running, and to handle that one instead if they are indeed run as user.

I know this may be sloppy as a proposed solution, but I hope to find more people willing to discuss this further.

Better solution
While I agree, user services is something I am looking for, I have some notes:
What I've done on my machine is to create a runtime for my user, and add all the services i want for my user into it, and manually setting command_user to my user.group for the services, and hardcoding some paths. I don't know of a current way to make this cross-user compatible.
Then the only command I need to run is doas openrc mazunki, and it will run the services for me (including PipeWire).
Suggestion
The way I can see this working is if users had their own runtime (not completely sure about the path or naming conventions here, although username == runtime wouldn't be the worst idea, although this could create some naming conflicts if the username is something like boot or default), and be able to add/remove scripts to it without escalating permissions.
Then, in scripts, we'd need to have access to the $USER and maybe $USERGROUPm and maybe some of their XDG variables. With that, it would be trivial to run ${XDG_CONFIG_HOME}/environment to get other variables.

What I've done on my machine is to create a runtime for my user, and add all the services i want for my user into it (+default), and manually setting command_user to my user.group for the services, and hardcoding some paths. I don't know of a current way to make this cross-user compatible.
Then the only command I need to run is doas openrc mazunki, and it will run the services for me (including PipeWire).

This still poses a security risk as you could omit command_user and have stuff run as root; that should be defaulted for and enforced by OpenRC itself; also, unless you love to put passwords in twice, I definitely see how that doas could be inconvenient (unless you plug in a special rule for it, but again, security vulnerability)

The way I can see this working is if users had their own runtime (not completely sure about the path or naming conventions here, although username == runtime wouldn't be the worst idea, although this could create some naming conflicts if the username is something like boot or default), and be able to add/remove scripts to it without escalating permissions.

The idea of runlevels for users is not a bad one, though the best thing would be to prefix it in some way: bob => runtime user.bob

Then, in scripts, we'd need to have access to the $USER and maybe $USERGROUP and maybe some of their XDG variables. With that, it would be trivial to run ${XDG_CONFIG_HOME}/environment to get other variables.

Correction, the variables to be exposed would be at least $USER, $UID, $GROUP (not usergroup, that does not exist), $GID and $HOME. I am saying at least; you'd want to have some more variables or your entire environment available, though even that is a security risk; I'd propose a flag like inherit_user_env to inherit the environment in some way. Also I do not have ${XDG_CONFIG_HOME}/environment in my system and therefore I am not sure if you are suggesting something new to be added for users.

This still poses a security risk as you could omit command_user and have stuff run as root; that should be defaulted for and enforced by OpenRC itself; also, unless you love to put passwords in twice, I definitely see how that doas could be inconvenient (unless you plug in a special rule for it, but again, security vulnerability)

I haven't looked into the security concerns regarding OpenRC. I am a single-user on my desktop, so it hasn't been a concern for me.
It would be better to run openrc user.mazunki, without root, and let it run up the missing services for user.mazunki, automatically setting command_user as needed.
I think this would be a better solution, instead of needing to hard-code command_user on all user services.

The idea of runlevels for users is not a bad one, though the best thing would be to prefix it in some way: bob => runtime user.bob

I like it, I changed it on my system.

Correction, the variables to be exposed would be at least $USER, $UID, $GROUP (not usergroup, that does not exist), $GID and $HOME. I am saying at least; you'd want to have some more variables or your entire environment available, though even that is a security risk; I'd propose a flag like inherit_user_env to inherit the environment in some way. Also I do not have ${XDG_CONFIG_HOME}/environment in my system and therefore I am not sure if you are suggesting something new to be added for users.

I just named it $USERGROUP as an example, but I think maybe $RC_USER and $RC_GROUP would be better options. I'm not sure we need the UID, GID, and HOME path, but perhaps.
Maybe setting a list of environment variables to be inherited would be okay. Having XDG_* by default would sure be nice.
Being able to inherit_user_env would be an appendix to those, I think.
You don't have ${XDG_CONFIG_HOME:-$HOME/.config}/environment on your system, because it's not a default thing to be there. I think the analogous "default" one would be ~/.profile, but personally I hate having dotfiles in $HOME, so I've cleaned up my system a bit. Similarly, I also have ${XDG_CONFIG_HOME}/{aliases,dircolors,x11-environment,wl-environment}. It makes sense to have user environment in the config path, since we also have /etc/environment for system-wide settings.

I have posted a "working" example for how I update my CloudFlare DNS records on my scripts repository as a user. It seems to work well, except for the fact that I still need to use root to change runtimes.
I have also tried to boot up my window manager through it, but I am struggling with running dbus manually, withouth dbus-run-session. PipeWire does work fine, though (on one session, but not for my secondary tty running an Xorg session).
I can't properly find a clean way to pass around variables, though.

@mazunki I just had some time to check your scripts folder, and unless I am mistaken you are not really solving the main issue: OpenRC is still running those services as system services and you still need root to manage them.
Sadly I didn't come up with a better or more dynamic idea as of yet (also I think there'd be another problem -- how can we tell the exact moment when users log in and out to start and stop their services?) and I also resorted to system services with command_user.
Hope this issue gets some traction.

@mazunki I just had some time to check your scripts folder, and unless I am mistaken you are not really solving the main issue: OpenRC is still running those services as system services and you still need root to manage them.
Sadly I didn't come up with a better or more dynamic idea as of yet (also I think there'd be another problem -- how can we tell the exact moment when users log in and out to start and stop their services?) and I also resorted to system services with command_user.
Hope this issue gets some traction.

You are entirely correct.
My "solution" involves initial escalation, although this is only a concern on multiuser scenarios. For my home usage I don't really mind, since I'm not giving pipewire, for instance, any escalation, meaning there's no threat of the apps posing a security risk. The only threat is me abusing OpenRC to take over my own computer.
It's a compromise since there's no better solution yet.
Also, not only that, I also need to hardcode a configuration file + init script for each user, with the appropriate RC_USER variable. That's fine if only one user needs the user service, but under most scenarios I would like to be able to add the user service to multipe running user instances at once. Currently, my solution would require copies of the same user-pipewire init script to solve this, instead of simply having config differences.

how can we tell the exact moment when users log in and out to start and stop their services?

Replying to myself: OpenRC's PAM integration. a PAM module can be indeed used to know when an user logs in and out of the system.

By the way, for now Dinit in userspace works just fine on my Artix install, until user mode OpenRC gets some more attention.

how can we tell the exact moment when users log in and out to start and stop their services?

Replying to myself: OpenRC's PAM integration. a PAM module can be indeed used to know when an user logs in and out of the system.
By the way, for now Dinit in userspace works just fine on my Artix install, until user mode OpenRC gets some more attention.

Yeah, this looks really interesting. For others, see https://github.com/chimera-linux/dinit-userservd too.

For what it worths, i use this initscript:
#!/sbin/openrc-run
# Copyright 2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

name="userd daemon"
description="user specific init and shutdown spawner"

user_name=${user:-${RC_SVCNAME#userd.}}
user_homedir="$(getent passwd ${user_name} | cut -d: -f6)"
user_userd="${user_homedir}/.userd/"
shutdown_timeout=${shutdown_timeout:-"5m"}
pidfile="/var/run/${RC_SVCNAME}.pid"
SSD_IONICELEVEL="${ionice}"
SSD_NICELEVEL="${nice}"

start() {
        start-stop-daemon --exec "${user_userd}/start" --pidfile "${pidfile}" --user="${user_name}" --background --chdir="${user_userd}" --make-pidfile --stdout "${user_userd}/stdout.log" --stderr "${user_userd}/stderr.log"
}

stop() {
        timeout "${shutdown_timeout}" su --login -c "cd ${user_userd} ; ${user_userd}/shutdown" - "${user_name}"
}

Then, administrator usually only have to cd /etc/init.d; ln -s userd userd.username, add it to wanted runlevel, and this uid will have ~/.userd/start and shutdown called appropriately (those can be used to daisy chain a specific init-style program, like svscan)

I launch dinit through emptty. Emptty closes dinit automatically when a login session is closed.
~/.config/emptty
#!/bin/bash
Selection=true

xrdb -merge ~/.Xresources

. /etc/profile
. ~/.env

dinit &

"$@"

dinitctl shutdown

There's two distinct (but very similar) ideas being discussed here:

Use the root OpenRC manage use services too: This seems to work for single-user systems, but is quite involved in terms of setup, has too many risks of accidental escalation, and requires using (or tweaking) sudo for managing user services.
Run a second instance of OpenRC per each local user with their daemons. This is the suggestion made by op, and requires changes to OpenRC itself, but allows a user to run their own OpenRC instance with their own services. This is very suitable for shared machines or users who can't sudo.

For the second approach, OpenRC would need to essential do something like:
if getpid() == 0:
    INIT_DIR = /etc/init.d
else:
    INIT_DIR = ~/.config/init.d/

And a few similar changes for the other paths. I did something rather similar to OpenBSD's rc about a decade ago and the result was a bit of a hack but worked.
Being able to manage user services like this would be very convenient to manage services like pulseaudio, pipewire, xdg-portals, offlineimap, etc.

Maybe, we should dinit instead of OpenRC for user services?

Adding our support here for use-cases like rootless containerd (and friends). You can currently get them into a service by using command_user, but as mentioned, there's risk of escalation, managing the scripts gets annoying (you need to bug the admin), and so on. This would make everything a whole lot easier.

For the second approach, OpenRC would need to essential do something like:
if getuid() == 0:
    INIT_DIR = /etc/init.d
else:
    INIT_DIR = ~/.config/init.d/

And a few similar changes for the other paths. I did something rather similar to OpenBSD's rc about a decade ago and the result was a bit of a hack but worked.
Being able to manage user services like this would be very convenient to manage services like pulseaudio, pipewire, xdg-portals, offlineimap, etc.

I am in favour of this solution if it can be implemented good.
Some extra thoughts

there should be a user cgroup, if cgroups are enabled. All user services ought to be hierarchically underneath this.
user should not need to use privilege escalation.
user services should be easily managed with standard tools like rc-service, rc-update, etc.
an admin should be able to enable/disable/start/stop individual user services
an admin should be able to control which users, if any, are eligible to have user services


misspelled key arguments hang vncdotool

Not realizing that it's ctrl and not ctl I've been banging my head on a client problem.  Turns out that (like most async frameworks) twisted hides tracebacks, so you get
DEBUG:vncdotool.client:keyPress ctl-u
DEBUG:vncdotool.client:keyDown ctl-u
CRITICAL:root:TIMEOUT Exceeded (2.0s)

even with -vv (likewise enter vs. Enter.)   If you call the api manually, you get
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "vncdotool/api.py", line 108, in proxy_call
    raise VNCDoException(result)
vncdotool.api.VNCDoException: [Failure instance: Traceback: <type 'exceptions.TypeError'>: ord() expected a character, but string of length 3 found
/usr/lib/python2.7/dist-packages/twisted/internet/defer.py:459:callback
/usr/lib/python2.7/dist-packages/twisted/internet/defer.py:567:_startRunCallbacks
/usr/lib/python2.7/dist-packages/twisted/internet/defer.py:653:_runCallbacks
vncdotool/api.py:95:callback
--- <exception caught here> ---
/usr/lib/python2.7/dist-packages/twisted/internet/defer.py:150:maybeDeferred
vncdotool/client.py:158:_decodeKey
]

which was when I finally caught on, added some debug statements, and confirmed that it was failing in keys = [KEYMAP.get(k) or ord(k) for k in keys] and the traceback was getting swallowed somewhere.
Now that I know this it works great (driving qemu booting an ubuntu iso, for when preseeds aren't sufficient) but it was really frustrating.
ps. maybe also use KEYMAP.get(k.lower()) in there, along with ctl/ctrl aliases :-)

diff --git a/vncdotool/command.py b/vncdotool/command.py
index 8b4ec18..f4bf38a 100644
--- a/vncdotool/command.py
+++ b/vncdotool/command.py
@@ -227,6 +227,11 @@ def build_tool(options, args):

     # close the connection when we're done
     factory.deferred.addCallback(lambda client: client.transport.loseConnection())
+    def command_die(err):
+        err.printTraceback()
+
+    factory.deferred.addErrback(command_die)
+

     return factory

Gets a traceback even without -v, but it still hangs at that point; I'm guessing that exiting from command_die would fix that.
ERROR:twisted:Traceback (most recent call last):
ERROR:twisted:  File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 1252, in mainLoop
ERROR:twisted:    self.runUntilCurrent()
ERROR:twisted:  File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 878, in runUntilCurrent
ERROR:twisted:    call.func(*call.args, **call.kw)
ERROR:twisted:  File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 459, in callback
ERROR:twisted:    self._startRunCallbacks(result)
ERROR:twisted:  File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 567, in _startRunCallbacks
ERROR:twisted:    self._runCallbacks()
ERROR:twisted:--- <exception caught here> ---
ERROR:twisted:  File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 653, in _runCallbacks
ERROR:twisted:    current.result = callback(current.result, *args, **kw)
ERROR:twisted:  File "/usr/lib/python2.7/dist-packages/vncdotool/client.py", line 174, in keyPress
ERROR:twisted:    self.keyDown(key)
ERROR:twisted:  File "/usr/lib/python2.7/dist-packages/vncdotool/client.py", line 181, in keyDown
ERROR:twisted:    keys = self._decodeKey(key)
ERROR:twisted:  File "/usr/lib/python2.7/dist-packages/vncdotool/client.py", line 158, in _decodeKey
ERROR:twisted:    keys = [KEYMAP.get(k) or ord(k) for k in keys]
ERROR:twisted:exceptions.TypeError: ord() expected a character, but string of length 3 found

(cribbed from https://stackoverflow.com/questions/7266398/twisted-deferred-full-traceback for reference.)


Normalization approaches to take meaningul values of reads per transposon insertion throughout the chromosomes

For estimating the fitness level for each insertion, the data needs to be normalized to compensate for the fact that the likelihood for transposon insertions is not constant throughout the chromosomes.
After normalization, the neutral regions are expected to have similar number of reads. Using this result, a fitness level can be defined, ideally between 0 and 1 where 1 is defined by the cells that have the most number of reads.

In order to determine whether the number of transposon insertions in a CDS is more or less then what we would expect, the number of insertions in each CDS need to be normalized relative to the average number of transposon insertions outside the CDS (i.e. the background). However, the number of insertions is not homogeneously distributed throughout the genome (i.e. some genomic regions are more likely to have transposon insertions compared with other regions). Therefore, the number of insertions in the CDS need to be normalized by the average of the local background. Currently I'm developing a tool that determine this local background by searching, for each CDS, the local neutral regions (i.e. regions that do not seem to code for anything special like genes, telomeres, ARS etc.).

I made a first attempt in estimating the fitness of the cells based on number of reads. I went for the most simple approach which is dividing a chromosome in sections (which I called windows) and normalized the data within each window (see attached file). I did the normalization like this because the likelyhood of an insertion is not constant throughout chromosome, so some regions (typically around the centrosomes) typically bare more transposons. After I got a distribution that looked more flat (e.g. the average went from 0.69+/-1.53 reads per basepair per region before normalization to 0.66+/-1.33 after normalization). Finally, I divided all reads by the largest bar (assuming these cells had the highest fitness), which gives me a value between 0 and 1 which I then define as the fitness level.
I think this approach might be so good after all, since it is a bit dubious how to define the windows for normalization.
Also, there are typically outliers (i.e. few bars with much more reads compared to the other bars), even after normalization.
So I am going to look at other approaches as well.
Fitness_from_reads1.pdf

Great Greg!
The next step is to validate this fitness measure with the available information on positive and negative interactors of dpl1, using the correlation matrix of positive and negative scores (score=ab-a*b).

Normalization of the reads is updated with a method introduced in the paper by Gallagher et.al. 2011. This is done in the code genomicfeatures_dataframe_with_normalization. The normalization equation is given in the attached figure.

For the normalization of the interchromosomal regions, only the noncoding regions are considered. Attached are two plots of the same chromosome (chromosome V from WT1 from Benoit), the first which is not normalized and the second which is normalized using this code.

This code creates a dataframe that contains all important information, the feature name and type (e.g. gene, telomeres, centromeres etc.), essentiality, genomic position, length, number of insertions, number of reads, normalized number of reads, number of insertions and reads in the central 80% of the genes, etc.
Currently it needs to be investigated how to determine a relevant window size and the codes needs to be properly tested and verified.

To complete the fitness calculation we would also need the data from the normalized reads of the mutant : dpl1d

[x] Normalized reads from the mutant (https://github.com/Gregory94/LaanLab-SATAY-DataAnalysis/tree/dev_Leila/Python_scripts/fitness_from SATAY_codes)
[ ] It will be nice to add the standard name of the feature name, so we can easily identify ORFs

I added the gene aliases in the dataframe dna_df2 (see genomicfeatures_dataframe_with_normalization.py). This thus now includes the systematic gene names (e.g. YLR229C) and the standard name(s) (e.g. CDC42).

An easy addition to this, as discussed in the meeting with Werner, is to divide the read number by the number of transposons, given that we have multiple transposons and reads added up as a result of the bin size or a moving average. This should help us to get rid of the peak around the centromere because this peak is only due to an increased number of transposons and not due to more reads per transposon.

Leila commented here that we could check if this is useful by calculating the variation in the supposed neutral regions over the chromosome, as after this normalization we would expect little variation in the number of reads over all the neutral regions.

yes, I have already added this to the dataframe variable (see also the python notebook of the same code) using the name Nreadsperinsrt and I also did this for the truncated gene where I ignore the first and last 100bp of the genes. I took the number of transposons per genomic feature (i.e. gene, telomere, noncoding region etc.). I haven't done any statistics on this data yet.

See also this question at the satay forum about normalization.


Remote Management

We've configured ELP, and it is working. However, I've discovered that it appears we cannot manage it remotely; in order to do either Get-ADFSAccountActivity, or Reset-ADFSLockout, you have to logged in to the ADFS server itself. Trying to run these commands remotely (through Invoke-Command) returns the error 'Exception of type 'Microsoft.IdentityServer.User.UserActivityRestServiceException' was thrown.'
We'd like to allow our help desk users to check these lockouts and reset them when necessary without giving them more rights than necessary. Anyone know a way to be able to manage the lockouts without having to RDP into the server?

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

ID: d8634165-2ff5-9b01-e3fc-17827360a5f3
Version Independent ID: a5a91921-3193-93ad-df22-d486e65b19f8
Content: Configure AD FS Extranet Lockout Protection
Content Source: WindowsServerDocs/identity/ad-fs/operations/Configure-AD-FS-Extranet-Smart-Lockout-Protection.md
Product: windows-server-threshold
GitHub Login: @billmath
Microsoft Alias: billmath

Apparently is on the radar to be fixed in a future update https://social.technet.microsoft.com/Forums/windows/en-US/187db7f0-6438-4a16-862e-61662899e687/adfssmartlockoutenforce-issue?forum=ADFS

I'm a little late here, but if you use -authentication credssp on invoke-command, new-pssession, or enter-pssession then it will get around the design flaw and work.  it's not the most secure, but it's a lot better than remote desktop.

Apparently is on the radar to be fixed in a future update https://social.technet.microsoft.com/Forums/windows/en-US/187db7f0-6438-4a16-862e-61662899e687/adfssmartlockoutenforce-issue?forum=ADFS

lol, guess they changed their mind, still isn't working on the latest version :(

Apparently is on the radar to be fixed in a future update https://social.technet.microsoft.com/Forums/windows/en-US/187db7f0-6438-4a16-862e-61662899e687/adfssmartlockoutenforce-issue?forum=ADFS

lol, guess they changed their mind, still isn't working on the latest version :(

That's sad

Apparently is on the radar to be fixed in a future update https://social.technet.microsoft.com/Forums/windows/en-US/187db7f0-6438-4a16-862e-61662899e687/adfssmartlockoutenforce-issue?forum=ADFS

lol, guess they changed their mind, still isn't working on the latest version :(

That's sad

I did find this though, maybe they just went in a different direction with getting this working: https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/operations/delegate-ad-fs-pshell-access


chore(deps): update dependency @sentry/cli to v1.47.1

This PR contains the following updates:

Package
Type
Update
Change

@sentry/cli (source)
devDependencies
minor
1.46.0 -> 1.47.1

Release Notes

getsentry/sentry-cli
v1.47.1
Compare Source

Fix potentially broken payloads in send-event.

v1.47.0
Compare Source

Trim whitespace in header values to prevent potential header injections
through the auth token header. (#563)
Improved Azure DevOps URL parsing. (#556)

Renovate configuration
:date: Schedule: At any time (no schedule defined).
:vertical_traffic_light: Automerge: Enabled.
:recycle: Rebasing: Whenever PR becomes conflicted, or if you modify the PR title to begin with "rebase!".
:no_bell: Ignore: Close this PR and you won't be reminded about this update again.

[ ] If you want to rebase/retry this PR, check this box

Available now for Enterprise: Renovate Pro with real-time webhook handling and priority job queue.

PR has been edited
:construction_worker: This PR has received other commits, so Renovate will stop updating it to avoid conflicts or other problems. If you wish to abandon your changes and have Renovate start over you may click the "rebase" checkbox in the PR body/description.

:tada: This PR is included in version 2.137.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Follow Node's callback-last convention for client calls

This follows the suggestion made in #5526. This is an API change that I think is worth making, and I think it is important to make the change before we are officially out of beta.
This change makes the following breaking API changes to client method calls:

Optional arguments must be provided before the callback, not after (This only affects unary and server-streaming calls).
Unused optional arguments must be omitted; previously they could be null or undefined. Empty values of the corresponding type for optional arguments still work.

CC @jayantkolhe Is a change like this OK at this point in our timeline?

I have added an option to make Client objects use the old argument order for method calls.

OK, tests are green.


Spike: look into alternative approaches to metrics queries

Currently, experiment metrics are calculated in the background for all experiments and queries to retrieve the data start as soon as a user clicks on the Experiment Detail page. We expect that moving these queries to the read-replica will decouple issues from the client traffic, but there may (will?) still be long-running metrics queries. This spike is to explore possible other ways to address long-running metrics queries that don't negatively impact the user experience.
Ideas

Calculate metrics on-demand (e.g. with a button "calculate" - what would this look like?)
Download a report from an S3 resource
Show a spinner that indicates to the user that the metrics are being calculated (right now, nothing indicates that a query is in progress so it just looks broken)

I will be working on this.


Can't edit some items and spells DND 4.0.4

I can't edit many of items and spells. No modules active
Next message in console

Looks like you at least have libWrapper enabled. I'd double check that you actually have no modules active.

Looks like you at least have libWrapper enabled. I'd double check that you actually have no modules active.

Even in world without modules and using SRD, still the same problem

Can you show the console error in a module-less world?

Can you please bring this one to the Discord server for investigation? Otherwise we're going to need you to provide a lot more context: Host setup, client browser (and version), core build, specific items involved, where you're trying to edit them, to start.

Can you show the console error in a module-less world?


Added hard stop functionality to arm periodic, tuned shot with hardstop

written by audrey
guesstimate tune without empirical testing!

@BrandonTheBusyBeaver117 idk if we have covered this, but you should not merge the pr -- wait for Lexie to review, and let Audrey merge, as it's primarily her pr.

@isaec okie dokie! got it.


Kubernetes for local dev

test this:
On a Linux box, download https://k3s.io/ and run it in server mode
sudo k3s kubectl create configmap otel-config --from-file=otel/collector-config.yaml
for f in deployment/*.yaml; do sudo k3s kubectl apply -f "$f"; done
On Windows, there are many ways to run Kubernetes, but the simplest way is probably to use the Kubernetes installation built into Docker Desktop. There's an "Enable Kubernetes" checkbox in the Docker settings that will do all the setup for you, though it doesn't install the kubectl binary. In order to run kubectl commands you'll need to install kubectl yourself.
UPDATE: Now partway through writing a task localdev task. Parts of it are working: you should be able to do the following:
task localdev
In another terminal, ssh k8sdev
Inside the ssh session, ls /app and you should see the Git repo
Not yet working: pushing to that Git repo and having it auto-update

I'm probably going to change my approach significantly: I've just learned about https://skaffold.dev/, which seems perfect for our needs. But I'm currently having a problem building the frontend Dockerfile, getting an error about "text file busy" when pnpm tries to install node-gyp. (That error is slightly misleading: it refers to trying to change a binary while that binary is being run.) Once I get that error figured out, I'll change this PR over to use Skaffold for local k8s dev.

@hahn-kev This PR is finally ready for other people to test again. You'll want to install the skaffold tool, then run skaffold dev --cleanup=false. To check local development, run skaffold dev --cleanup=false --profile=no-frontend to run the frontend locally, or else skaffold dev --cleanup=false --profile=infra to run both the backend and frontend locally. I'll set up a Taskfile task for those once I know that it works on someone else's machine.

Alright, the first time I ran it I got a weird error because I was trying to use the staging context but it couldn't connect. I changed to the docker desktop k8s context and then I get the following error:
...
#14 [builder 8/8] COPY static /app/static
#14 DONE 0.1s

#15 exporting to image
#15 exporting layers
#15 exporting layers 3.2s done
#15 writing image sha256:601fc6c0e8c9dabc0b4c75558ebae2b62c6e7bd2318ab1aa06a107470cd7d0cb done
#15 naming to ghcr.io/sillsdev/lexbox-ui:4f19dfb done
#15 DONE 3.2s
Building [ghcr.io/sillsdev/lexbox-api]...
Target platforms: [linux/amd64]
Build [ghcr.io/sillsdev/lexbox-api] was canceled
build [ghcr.io/sillsdev/lexbox-ui] failed: getting imageID for ghcr.io/sillsdev/lexbox-ui:4f19dfb: request returned Internal Server Error or API route and version http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.41/images/ghcr.io/sillsdev/lexbox-ui:4f19dfb/json, check if the server supports the requested API version

looks like it's trying to get something from docker but it can't.
To prevent a mixup of the k8s context we should probably configure skaffold to only work on the docker desktop context: https://skaffold.dev/docs/environment/kube-context/
Later on if we want to use skaffold to configure staging or prod we can but right now I just want to prevent a screwup.

I'm going to do my best to pick this up and carry it across the line.


Send webhook during authentication lifecycle

Send webhook request when users perform some authentication attempt:

Identity created
Password reset requested
Magic link requested
Authentication requested
Email verification requested

There should be some mechanism to attach metadata to the event payload so that things like the user's locale can be used to internationalize and/or translate the email.

The functionality in #7727 will be used to implement sending webhooks during authentication ceremonies.


Reduce number of arguments when creating a proxy (registrar and resolver)

Ok, so arguments are actually cheaper than external calls. Lesson learned. Closing for now.


Don't include ffmpeg as a build lib

Previously this was statically linking in ffmpeg which meant you couldn't swap in the version without the proprietary codecs.
Closes #268
1.4.15
> ./node_modules/electron/dist/electron -v
v1.4.15
> nm -D node_modules/electron/dist/electron | grep av_buffer_create
                 U av_buffer_create
> readelf -d ./node_modules/electron/dist/electron | grep ffmpeg
 0x0000000000000001 (NEEDED)             Shared library: [libffmpeg.so]

1.6.4
> ./node_modules/electron/dist/electron -v
v1.6.4
> nm -D node_modules/electron/dist/electron | grep av_buffer_create
000000000349c7a0 T av_buffer_create
> readelf -d node_modules/electron/dist/electron | grep ffmpeg

This branch
> ~/Downloads/electron-ffmpeg/electron -v
v1.6.5
> nm -D ~/Downloads/electron-ffmpeg/electron | grep av_buffer_create
                 U av_buffer_create
> readelf -d ~/Downloads/electron-ffmpeg/electron | grep ffmpeg
 0x0000000000000001 (NEEDED)             Shared library: [libffmpeg.so]

Testing
Tested using http://www.quirksmode.org/html5/tests/video.html

With proprietary codecs
Without proprietary codecs

you couldn't swap in the version without the proprietary codes.

Can you elaborate on this? What is meant by "proprietary codes"?

Can you elaborate on this? What is meant by "proprietary codes"?

Should have been codecs, https://github.com/electron/libchromiumcontent/issues/174 has a pretty good overview.

To clarify: As of now, ffmpeg supporting proprietary codecs ist still shipped and dynamically linked with the Electron executable by default, but 8d55106 / >= 1.6.4 now allows swapping it with the non-proprietary version?

As of now, ffmpeg supporting proprietary codecs ist still shipped and dynamically linked with the Electron executable by default,

Yes

= 1.6.4 now allows swapping it with the non-proprietary version?

Yes, and also versions < 1.5.0, this regressed as part of the Chrome upgrade that shipped in 1.5.0 - 1.6.3