[Logout spots chams]

"Ghost" chams that are left there after the player logs out like in the ss where he is logged out, but I still have the chams on my screen

Could suggestion, please also check out the ExtraTab ping: https://github.com/3arthqu4ke/3arthh4ck/actions/runs/2936382093


Review needed: Positive and Negative numbers assessment guide

This guide can be found in branch content/data-representation
With file path ...curriculum-guides/ncea/assessment-guide-level-2-excellence-data-representation-numbers.md
(All of it was in commit 1f8b3074d2d86982655a3ec7da812858869e32f6)

Minor fixes/polishing done: commit fffdf7d5dd951cd46a317fc0872676f7d8e4cec5

Checked the review and satisfied with it (a couple of minor comments on the commit which I'd like you to give feedback on so that we can consider creating issues for them, but might not fix for 2.5).

Oh by the way @hayleyavw , it's great if you can read over this too. I just closed the issue because it is no longer essential to 2.5 (but would be very helpful).

@timbellnz @Heidirose right so I finally got a chance to read this. Really well written, very clear, but I'm worried it's ....too helpful. I'm wondering if in the Explaining reasons why Two's Complement is widely used, and simple sign bits are not section we are spoon-feeding them a bit too much, particularly where we give them calculations to include. Could we somehow generalise these - give one or two calculations and why they are significant, then ask the student to find any other patterns themselves? As I was reading it, it just seemed like there was nothing left for me figure out. Or did we intentionally list exactly what we want since this section does not go to Excellence?
Feel free to argue with me on this one. Not essential for the 2.5 release.

My thoughts on the assessment guide were that it only goes to merit, and that it is only one of the two topics they need to cover for data representation. This assessment guide is a tiny part of the overall standard -- perhaps about 1/8 of the work at most, so half a credit.
Some students will have trouble with those concepts (e.g. with generalising base 10 column addition to base 2 column addition, etc). You found it easy, but I don't think most of them will. Just my thought. Will see what @timbellnz says.

My thoughts ranged over what both of you said! I'll have another look at it as part of this issue, and if I'm still feeling ambivalent, we could ask an experienced teacher for an opinion. I think it's fine to release it as it is, and it would also be fine to dial back the help a bit, but I'll review it to see if it's more obvious what to do. (So this issue remains assigned to me until I do that!)

Awesome, thanks for that Tim! My thought also was that it is more abstract (and so more potentially confusing), will be useful to get a teacher's opinion. Can you do that as soon as possible? I'd prefer to get any modifications out before the guide is widely used.

Yea good point @Heidirose, not sure if most students would find this easy or not. @timbellnz I would also be keen to get some feedback from a teacher.

Removing the milestone 2.5 tag, as we've agreed that while this is important, it's not required for 2.5 :)

I've checked over it; regarding difficulty, it seems about right. The guide does provide a lot of help, but the topic will be quite complex for a lot of students, and if they can do a correct worked example with their own numbers they'll be doing pretty well. I did a bit of polishing: commit 471aeb9709efb7e924a2fc9806515008f6f2c372


Redux DevTools vNext Umbrella

[x] Move LogMonitor into a separate project (#132)
[x] Kill  and provide a simpler API to connect monitors (#132)
[x] Perf improvements
[ ] Kill DebugPanel in favor of docking solution with persistence (https://github.com/gaearon/redux-devtools/pull/107, #132)
[ ] Provide a built-in helper for opening DevTools in a separate window
[ ] Update docs and examples

Provide a built-in helper for opening DevTools in a separate window

I’m using react-popover in a project right now and it works out of the box. My current implementation is fairly standard. Current state of the DevTools UI is within the component itself and it takes your actual app as children: https://gist.github.com/iamdustan/c5867aa3d0a40ff0ecf1

Usage is:
const app = <Provider ... /><Routes ... /></Provider>;
ReactDOM.render(
  process.env.NODE_ENV === 'production' ? app :
  <Devtools store={store}>{app}</Devtools>
), element);

Ah. Just saw https://github.com/gaearon/redux-devtools/pull/132. Looking forward to that new world!

@gaearon any plans to support AMD?

@ohana54
What would supporting it involve? Webpack already supports AMD out of the box so you shouldn't need anything special. In any case, I'd encourage you not to write new code in AMD as it's a format of the past.

My knowledge is limited on the subject, but I tried using the npm module and it doesn't look like a webpack output. I also saw in package.json that the only build step is running babel. I'm sorry if I'm completely off here.

Forgot to mention, using AMD is last thing in the world I want to do right now, unfortunately don't have a choice.

My knowledge is limited on the subject, but I tried using the npm module and it doesn't look like a webpack output. I also saw in package.json that the only build step is running babel. I'm sorry if I'm completely off here.

The NPM module is in CommonJS. Webpack lets you mix AMD and CommonJS code in one project so it shouldn't be an issue if you're using Webpack.
We don't plan to provide an AMD build of Redux DevTools, just like there's no AMD build of Redux itself.

In any case, this if off topic to this thread. Please file a new issue if you'd like to discuss this further.

Sure, opened #139


Sapflow C9 and C18 have NA grid location in dashboard data

😕

They're NA in the ./Design/sapflow_inventory.csv file.

okay ill check those when i update inventory with Alice's tomorrow (Sunday)

Note these now have entries in the sapflow inventory file, see #109 , but they're not correct; we need to fix based on actual locations of the two trees.

C18 is by G1
C9 is by A2


Instances are not being saved in mongodb-Atlas

Bug
I am trying to learn odmantic with fastapi. But the instances are not being saved in the atlas database.
Current Behavior
Instances are not being saved in database, but no errors are raised as well.
... Steps to reproduce the bug ...
Run the code with:
uvicorn scoreboard.main:app
Expected behavior
Instances should be saved in database.
Environment

ODMantic version: 0.3.5
MongoDB version: ?
Pydantic infos:

pydantic version: 1.8.2
            pydantic compiled: True
                 install path: C:\Program Files\Python39\Lib\site-packages\pydantic
               python version: 3.9.7 (tags/v3.9.7:1016ef3, Aug 30 2021, 20:19:38) [MSC v.1929 64 bit (AMD64)]
                     platform: Windows-10-10.0.22000-SP0
     optional deps. installed: ['dotenv', 'email-validator', 'typing-extensions']

My directory structure:
scoreboard-api.
│   requirements.txt
│
└───scoreboard
    │   .env
    │   main.py
    │   models.py
    │   __init__.py

Code:
__init__.py:
from os import environ

from fastapi import FastAPI
from fastapi_versioning import VersionedFastAPI
from motor.motor_asyncio import AsyncIOMotorClient
from odmantic import AIOEngine

app = VersionedFastAPI(
    FastAPI(
        title="Scoreboard API",
        description="Scoreboard API",
        version="0.1.0",
    ),
    version_format="{major}",
    prefix_format="/v{major}",
    default_version=(1, 0),
)
_client = AsyncIOMotorClient(environ.get("mongo_uri"))
DB_Engine = AIOEngine(motor_client=_client, database="scoreboard")

models.py:
from datetime import date

from odmantic import Field, Model, Reference

class Team(Model):
    name: str = Field(max_length=20, primary_field=True)

    class Config:
        collection = "teams"
        anystr_strip_whitespace = True

class Score(Model):
    team: Team = Reference()
    date_: date = Field(
        default=date.today(),
        key_name="date",
    )
    score: int = Field(default=0)

    class Config:
        collection = "scores"

main.py:
from typing import List
from datetime import date
from scoreboard import app, DB_Engine
from scoreboard.models import Team, Score
from fastapi import HTTPException

@app.get("/")
def root():
    return {"message": "API is up."}

@app.get("/teams", response_model=List[Team])
async def get_teams():
    return await DB_Engine.find(model=Team)

@app.post("/teams", response_model=Team)
async def create_team(name: str):
    return await DB_Engine.save_all([Team(name=name)])

@app.post("/teams/{name}", response_model=Team)
async def add_score(name: str, score: int):
    team = await DB_Engine.find_one(Team, Team.name == name)
    if team is not None:
        score_obj = Score(score=score, date_=date.today(), team=team)
        return await DB_Engine.save_all([score_obj])
    raise HTTPException(status_code=404, detail=f"Team {name} not found")

Versions

Version of additional modules (if relevant): requirements.txt

fastapi==0.68.1
odmantic==0.3.5
dnspython==2.1.0
fastapi-versioning==0.10.0

Additional context
Requests:

Post request:

curl -X 'POST' \
  'http://<IP_ADDRESS>:8000/teams?name=gj' \
  -H 'accept: application/json' \
  -d ''

Response:
{
  "name": "gj",
  "id": "615ab4b7e269ec21751382dd"
}

Get request:

curl -X 'GET' \
  'http://<IP_ADDRESS>:8000/teams' \
  -H 'accept: application/json'

Response:
[]

Does this works with a local MongoDB instance (ran with docker for example) ?


Make correct claims about who pays for Price Concessions

A practice-level NCSO alert says something like

We estimate that in March 2019 total price concessions for out-of-stock medicines will cost Twyford Surgery an additional £752

This is incorrect. It should say something like

We estimate that in March 2019 total price concessions for out-of-stock medicines prescribed at Twyford Surgery will cost your CCG an additional £752

And should also include a disclaimer as a follow-up sentence

This is for information only; you should discuss with your CCG before modifying therapies based on Price Concessions.

That's OK Brian, the bit you tweaked was your own wording to start with ;)


Multiple Databases Show the Same Data

Description
I have several databases under "Databases".
All of them show the same data, as in the database that was used in login parameters.
I'd expect that when I'm navigating to another database and check its data, it should actually be different.
DBeaver Version
Community Edition 23.0.3
Operating System
macOS 13.3 (22E252)
Database and driver
Postgresql db and driver
Steps to reproduce
Simple test:

Databases
dbX
dbY
dbZ

Navigate to dbX and make any change.
Navigate to dbY and observe the same change present.

Additional context
No response

Did you configured connection with URL or with host and port?

Configured connection via Host, Port, Database name.

@E1izabeth thank you for the tip!
When I configured connection with URL, I was able to see the data in other databases.
Appreciate your suggestion!  It's perfect workaround.

Hi @E1izabeth, just to clarify, the issue was happening when I configured the connection via host.
When I configured via URL, it worked fine.

Hello @mishatim
Could you please remove the database and schema part from your host parameter and try again to connect with the Host authentication method?

It's been a while since no update here. If the issue is still actual, please let me know.


Update README to maintained Tetra integration

Original integration https://github.com/tesselode/egui-tetra is archived, so I forked and updated for latest egui and tetra.

Thasnks!


how to  select the rows use code

Hello, I didnt find the document how to  select the rows use code , so ask how to solve this question
look forward to reply
thanks

this.ref.table.setState({
    selectedRowKeys: [ .... ]
})

<BootstrapTable ref='table' .. >

Let me know if you got any question. :)

thanks


Error communicating with API: 'system_err1'

Custom integration done in EU API server, with login/pass and reboot
I got that message : Error communicating with API: 'system_err1'
LOG
2023-04-24 08:18:05.269 ERROR (MainThread) [custom_components.bestway] Data update failed
Traceback (most recent call last):
File "/config/custom_components/bestway/init.py", line 140, in _async_update_data
return await self.api.fetch_data()
File "/config/custom_components/bestway/bestway.py", line 226, in fetch_data
if device_attrs[f"system_err{err_num}"] == 1:
KeyError: 'system_err1'
2023-04-24 08:18:05.289 WARNING (MainThread) [homeassistant.config_entries] Config entry<EMAIL_ADDRESS>for bestway integration not ready yet: Error communicating with API: 'system_err1'; Retrying in background
2023-04-24 08:18:28.591 ERROR (MainThread) [custom_components.bestway] Data update failed
Traceback (most recent call last):
File "/config/custom_components/bestway/init.py", line 140, in _async_update_data
return await self.api.fetch_data()
File "/config/custom_components/bestway/bestway.py", line 226, in fetch_data
if device_attrs[f"system_err{err_num}"] == 1:
KeyError: 'system_err1'

My spa is now back up and running for the summer, however I see no trace of this error. It looks like perhaps the API returned a bad result. Was this a one-off or do you continue to see issues?

Hello, I have the same error with my Bestway hot tub. Connection to the Bestway app works flawlessly.
When connecting to Home Assistant, I also get the error message: Error communicating with API: 'system_err1'
LOG:
2023-05-17 13:20:11.068 ERROR (MainThread) [custom_components.bestway] Data update failed
Traceback (most recent call last):
File "/config/custom_components/bestway/init.py", line 140, in _async_update_data
return await self.api.fetch_data()
File "/config/custom_components/bestway/bestway.py", line 226, in fetch_data
if device_attrs[f"system_err{err_num}"] == 1:
KeyError: 'system_err1'
2023-05-17 13:20:11.072 WARNING (MainThread) [homeassistant.config_entries] Config entry<EMAIL_ADDRESS>for bestway integration not ready yet: Error communicating with API: 'system_err1'; Retrying in background
2023-05-17 13:20:16.664 ERROR (MainThread) [custom_components.bestway] Data update failed
Traceback (most recent call last):
File "/config/custom_components/bestway/init.py", line 140, in _async_update_data
return await self.api.fetch_data()
File "/config/custom_components/bestway/bestway.py", line 226, in fetch_data
if device_attrs[f"system_err{err_num}"] == 1:
KeyError: 'system_err1'

Please try the newly released v1.1.5 which will produce a useful log message next time this happens.
2023-05-17 20:32:39.345 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''not_here'' while decoding device attributes {"system_err2": 0, "wave_appm_min": 59940, "heat_timer_min": 0, "heat_power": 0, "earth": 0, "wave_timer_min": 59940, "system_err6": 0, "system_err7": 0, "system_err4": 0, "system_err5": 0, "heat_temp_reach": 0, "system_err3": 0, "system_err1": 0, "system_err8": 0, "system_err9": 0, "filter_timer_min": 0, "heat_appm_min": 0, "power": 1, "temp_set_unit": "\u6444\u6c0f", "filter_appm_min": 0, "temp_now": 28, "wave_power": 0, "locked": 1, "filter_power": 0, "temp_set": 30}

even with version v1.1.5 I don't get any other log for me
2023-05-18 08:06:07.863 ERROR (MainThread) [frontend.js.latest.202305033] :0:0 Script error.
2023-05-18 08:06:36.298 ERROR (MainThread) [custom_components.bestway] Data update failed
Traceback (most recent call last):
File "/config/custom_components/bestway/init.py", line 140, in _async_update_data
return await self.api.fetch_data()
File "/config/custom_components/bestway/bestway.py", line 226, in fetch_data
if device_attrs[f"system_err{err_num}"] == 1:
KeyError: 'system_err1'
2023-05-18 08:06:36.299 WARNING (MainThread) [homeassistant.config_entries] Config entry<EMAIL_ADDRESS>for bestway integration not ready yet: Error communicating with API: 'system_err1'; Retrying in background
2023-05-18 08:06:41.849 ERROR (MainThread) [custom_components.bestway] Data update failed
Traceback (most recent call last):
File "/config/custom_components/bestway/init.py", line 140, in _async_update_data
return await self.api.fetch_data()
File "/config/custom_components/bestway/bestway.py", line 226, in fetch_data
if device_attrs[f"system_err{err_num}"] == 1:
KeyError: 'system_err1'
2023-05-18 08:06:52.265 INFO (MainThread) [custom_components.bestway] Reusing existing access token
2023-05-18 08:06:52.351 DEBUG (MainThread) [custom_components.bestway.bestway] New data received for device 6YHnG491PpzozpLifqXJ4T
2023-05-18 08:06:52.351 ERROR (MainThread) [custom_components.bestway] Data update failed
Traceback (most recent call last):
File "/config/custom_components/bestway/init.py", line 140, in _async_update_data
return await self.api.fetch_data()
File "/config/custom_components/bestway/bestway.py", line 226, in fetch_data
if device_attrs[f"system_err{err_num}"] == 1:
KeyError: 'system_err1'
2023-05-18 08:06:52.356 DEBUG (MainThread) [custom_components.bestway] Finished fetching Bestway API data in 0.090 seconds (success: False)

Hi guys
I have update the integration to 1.1.15 as well, right now no connection error but SPA look like disconnect
same log, if this can help
2023-05-19 07:24:29.485 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 21, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 704, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:24:59.438 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 22, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 705, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:25:29.444 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 22, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 705, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:25:59.416 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 23, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 706, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:26:29.529 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 23, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 706, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:26:59.418 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 24, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 707, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:27:29.455 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 24, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 707, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:27:59.435 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 25, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 708, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:29:00.713 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 26, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 709, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:29:30.662 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 27, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 710, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:29:47.737 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 27, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 710, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}

It looks like this model is using a completely different protocol.
I see @ocramgf is using a Santorini. What Spa do you have @dsammaritano?
Someone will need to decode enough of the values in that output to make sense of the values. This normally means changing one control at a time via the normal spa controls, then grabbing one of those lines of output to see what changed. This isn't something I can do without owning one of these newer devices.
In the mean time I will add some additional sensors to read out version numbers. There is something that appears to be a protocol version field. My spa claims version 3, so I'm hoping this output is being generated by something other than that.

Hi
Sorry for delay, quite busy ...
I'm using Model Santorini, this have another pump named HydroJet Pro
There is 2 modes for "Bubble" and another button "Jet"
This one should th last version provide by Bestway right now on model Santorini, Maldive, San Francisco ...
https://bestwaystore.fr/pieces-detachees/1396-pompe-de-filtration-bestway-grise-pour-lay-z-spa-hydrojet-pro-a-partir-de-2021-ue.html
Give instructions if you need help

Questions that need answering by someone with a HydroJet Pro and these logs:

What changes in the log entry when the temperature unit on the spa changes between C and F?
The log shows heat=3 where I'd expect to see a simple boolean value. What other values are possible? What does on/off look like? Do we get different values depending on whether the spa is actively heating or not?
Similarly, the log shows filter=2 instead of a boolean. What does filter on/off look like?

Hi,
On the pump itself the buttons look like another pump, but for Bubble there is 2 modes and that switch between full / half / off
May be for that other switches use multi-value

There is now v1.4.0-alpha1 published as a beta release via HACS. This groups together a bunch of tasks around device support, and should add support for any Airjet_V01 or Hydrojet devices. The data to get this working has been scraped together from a number of different sources and combined with a bit of guesswork.
I'd very much appreciate some testing against real devices to confirm what's working, in particular:

Check that changing options via the official app or spa is correctly reflected in HA
Check that changing settings via HA has the expected effect
Any feedback on missing features

Debug logging has also been extended to print out those attribute collections for known devices (previous this only happened for unrecognised devices). If anything doesn't work as expected, capturing these messages before and after device state changes will be essential.

SUCCESS
I have had installed the integration quite a while ago, but didn’t had the time to track down the issues it had with my Hydrojet spa. Now I installed v1.4.0-alpha2 and it works for me!
Very happy right now!
Thanks so much.
Details of my environment and test
Spa: Bestway Lay-Z-Spa Dominica HydroJet, 2023 model (*1)
Reference: https://www.bestwaycorp.com/Product/Item?id=1060165XXX23
**Location of operation: Germany
Test Cases

Turning Filter to ON and OFF
Both commands work without issues. The pumps starts immediately after changing the state in Home Assistant (HA), but the switch in HA turns back to OFF-state and then its turns automatically back to ON after approx. 10 seconds. I assume this has to do with lag times in API communication in receiving an update of the state by the API.

Turning Spa Bubbles to ON, MEDIUM, MAX
All three commands work as expected! Very nice. It activates the so called Airjet Massage (*2)

Temperature, Heating up

Measuring current temperature works as expected
Changing Set Point Temperature (SPT) works as expected
Heating works as expected (*3)

Remarks
(*1) This spa is according documentation NOT a Hydrojet Pro, but simply a Hydrojet
(*2) It turns on the Air Bubbles not the Hydrojet Massage, which is totally correct
(*3) Did not test until now if the heating automatically stops when STP is reached, since it is fucking cold outside and want to prevent by power bill to explode… ;-)
Debug Logs
... as attachment
debug.log

Thanks for the thorough testing and feedback 😄
I've just published v1.4.0-alpha3 to tweak a few things:

The filter switch flickering should be fixed.
I've changed how both filtering and heater power are controlled. There was a mistake so I'm actually surprised this worked in the first place. A re-test would be useful.

The thermostat is set by the integration but it's over to the spa when it comes to stopping when it reaches temperature. It'll almostly certainly be fine.
Can you explain the bubbles / airjets / hydrojets in this spa as I'm not familiar with them? Sounds great that the OFF/MEDIUM/MAX setting works as expected. Is there also a hydrojet massage system that the integration can't currently control?

Thanks, @cdpuk, for the super fast response.
I am currently off-site so that I am not able to re-test, but will do on the weekend and will come back.
Your statement re Set Point Temperature makes totally sense. Thx as well.
Regarding your question: There are two types of massage functions in Bestways Spas:
a) Airjet - produces air bubbles.I believe all Bestway Spas do have this feature. It is that function, that your integration triggers, when you turn on “bubbles”.
b) Hydrojet - produces a water jet at two or more places in the pool sidewalls (under water). I guess you do not utilize this functions currently with your intergration at all.
Functions (a) and (b) can be triggered by buttons on the Spa’s screen or the original Bestway app (see screenshot).

Hydrojet can be turned ON / OFF only. It can be combined with AirJet.
If you wish, I can send you some log HA output of a session when I turn Hydrojet ON and OFF. I would need then to know, where and what exactly to log….

Thanks for the explanation.
Debug logs should be possible via Settings > Devices & Services > Bestway, then "Enable Debug Logging" for a bit, and then "Disable Debug Logging" should trigger a log download.
The following should create enough information to understand how the Hydrojet switch works:

Enable debug logging
Turn on jets
Wait 1 minute
Turn off jets
Wait 1 minute
Disable debug logs and paste the relevant bits of the log file on here

I just followed your suggested protocol. Here is the debug log output:
2024-01-13 15:47:36.373 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device 32okaUoeb1CaHv5kWlTaNk
2024-01-13 15:47:36.374 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Hydrojet' returned: {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 0, "word4": 0, "word7": 7, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 0, "option6": 10244, "ver": 982, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 7, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 0, "heat": 0, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 37, "filter": 0, "E28": 0, "bit6": 0, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-13 15:47:36.374 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.113 seconds (success: True)
2024-01-13 15:48:06.379 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device 32okaUoeb1CaHv5kWlTaNk
2024-01-13 15:48:06.380 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Hydrojet' returned: {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 0, "word4": 0, "word7": 7, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 0, "option6": 10244, "ver": 982, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 7, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 0, "heat": 0, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 37, "filter": 0, "E28": 0, "bit6": 0, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-13 15:48:06.380 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.119 seconds (success: True)
2024-01-13 15:48:36.372 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device 32okaUoeb1CaHv5kWlTaNk
2024-01-13 15:48:36.373 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Hydrojet' returned: {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 0, "word4": 0, "word7": 8, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 0, "option6": 10244, "ver": 982, "E22": 0, "jet": 1, "E23": 0, "power": 1, "Tnow": 7, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 0, "heat": 0, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 37, "filter": 0, "E28": 0, "bit6": 0, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-13 15:48:36.373 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.112 seconds (success: True)
2024-01-13 15:49:06.369 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device 32okaUoeb1CaHv5kWlTaNk
2024-01-13 15:49:06.370 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Hydrojet' returned: {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 0, "word4": 0, "word7": 8, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 0, "option6": 10244, "ver": 982, "E22": 0, "jet": 1, "E23": 0, "power": 1, "Tnow": 7, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 0, "heat": 0, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 37, "filter": 0, "E28": 0, "bit6": 0, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-13 15:49:06.370 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.109 seconds (success: True)
2024-01-13 15:49:36.388 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device 32okaUoeb1CaHv5kWlTaNk
2024-01-13 15:49:36.389 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Hydrojet' returned: {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 0, "word4": 0, "word7": 9, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 0, "option6": 10244, "ver": 982, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 9, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 0, "heat": 0, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 37, "filter": 0, "E28": 0, "bit6": 0, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-13 15:49:36.389 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.127 seconds (success: True)

Ah, there's a jet property that's either 0 or 1. Easy enough to add. Thanks for the logs.

v1.4.0-alpha5 is now available for testing jets control

Great. Hope I can do it latest on the weekend. Keep you posted.

Really great news. Did some testing: Works like charm!

In my first test (tun jet ON, wait 30 sec, turn jet OFF) the switch in HA returned back to ON approx. 30 sec after I was turning the jet OFF. But it was only the switch in HA, not the jet itself.
So I did a second test: Turned debug logging on a repeated the sequence. Unfortunately I could not reproduce the behavior the HA jet switch was flipping back to ON after turning if OFF.

Anyhow, I will take a closer look on this when it gets warmer and when we use the pool more frequently...
Keep you posted.
Many thanks for your work on this integration.
Bodo

Since things sound mostly there, I've released this as v1.4.0. Please report any problems as separate issues.


ZipCode generation taking long time

Zip code generation is going on 36 hours.  How long does this typically take?  Wondering if I need to be patient but I'm guessing something must not be right.  Thanks for the help.

Closing old issues. Sorry I wasn’t able to fix this.


Add informations to a MergeRequest Item

Missing valuable informations :

Group Project / Project
Branch name
Have I voted State
CI State

IMO the time spent since last update is not a very useful information
The Group Project / Project information could be shown in the title of a drop-down that would list MRs as suggested by https://github.com/TheGrowingPlant/gitlab-reviewer/issues/4

IMO the time spent since last update is not a very useful information

I use this information

I think there is no universal solution, everyone want different informations according to his own way to work.
As @TomBerriot have proposed, we could allow user to fully configure which columns to display in a drawer menu.

The last pipeline is now in the response of https://docs.gitlab.com/ee/api/merge_requests.html#get-single-mr


Update serverless logic web tools docs

We have outdated docs in https://kiegroup.github.io/kogito-docs/serverlessworkflow/main/tooling/serverless-logic-web-tools/serverless-logic-web-tools-overview.html
We should update it to reflect latest changes on https://start.kubesmarts.org/#/ and management console.

Closing as duplicate of https://github.com/apache/incubator-kie-kogito-docs/issues/692


[DIR-713] make secrets editable

NOTE: https://github.com/direktiv/direktiv-ui/pull/463 is already merged in, please review it first
Preview 🚀
https://github.com/direktiv/direktiv-ui/assets/121789579/563dda80-4feb-4bf1-818c-806690546118
This PR makes secrets editable and highlights uninitialized secrets.
I also removed the manual cache update after creating/editing and just use cache invalidation for the following reasons:

cache update mistakenly sorted results, this does not match the server result (anymore?)
it is possible to enter an existing variable name in the Create Variable dialog. This actually updates the old one, the cache update mechanism will show the same entry twice until the user reloads or useQuery refetches
both points above illustrate, why it is probably a good idea to prefer cache invalidation in the future. It also makes the code much more readable.

Follow-up tickets

E2E-test

When I try to save that, it (expectedly) returns a backend error.

Fixed with this behavior. I test the mimetype against our EditorMimeTypeSchema, this test might be a bit too restrictive though:
https://github.com/direktiv/direktiv-ui/assets/121789579/8e55a7e7-d5f9-4005-8bb9-12c5c4be6db8

I cannot download a binary namespace-variable due to a zod schema error.

I could not reproduce it (I tested it with an image, when I implemented it all the time), for me it works with and without your commit. This might be an OS related issue? However I also applied your fix to the mutation for workflow variables ( c1cb449c80836be5a62815e78e7a88dfc83c2dbd)

Lastly, the uninitialized secrets work well! But when you edit an existing secret, we should add an info alert above the editor saying "Existing secrets cannot be retrieved after creating. But you can overwrite the existing value with a new one." When you open a secret for editing now, it just shows an empty editor, which is confusing.

Fixed with this behavior:
https://github.com/direktiv/direktiv-ui/assets/121789579/2cceb7ea-3cb3-4e10-8b44-60078d5ebbfb
video demonstrates how the note will look together with an error, and that it will not show in the create modal or when the secret is not yet initialized


[Fixes #1247] Design Tokens link updated and removed target _blank

https://github.com/skeletonlabs/skeleton/issues/1247
Before submitting the PR:

[x] Does your PR reference an issue? If not, please chat to the team on Discord or GitHub before submission.
[ ] Did you update and run tests before submission using npm run test?
[x] Does your branch follow our naming convention? If not, please amend the branch name using branch -m new-branch-name
[x] Did you update documentation related to your new feature or changes?

What does your PR address?
Incorrect link to Design Tokens in docs/themes

@ucffool actually one quick correction, you have to put Fixes 1247 directly in the PR comment or it won't link the issue and auto-close it during the merge process. I'll go ahead and manually close that out, but FYI for the future!


Update .travis.yml

According to https://github.com/rust-lang/rust-clippy#travis-ci this is the correct way to install clippy in nightly.

Thanks for the PR!


Tiny error in example on page

Hi, Just stumbled on a small error on your example:
 https://www.npmjs.com/package/homebridge-weather-plus#
says:
        "units": "metric",
    }
]
I am pretty sure the comma will cause an error, so the correct version should read
        "units": "metric"
    }
]

Thanks!


Increase code cov for stream_data.js

Function Covered are stream_data.get_subscriber_count, stream_data.render_stream_description and stream_data.canonicalized_name.
In function render_stream_description removed undefined function marked and updated it so it uses single replace instead of chained replace

@lonerz done. The marked was undefined because i did not mock up the maked lib.

Can you make sure that for the commit stream_data: use regex instead of chaining replace. capitalize the u in use?

Otherwise, this looks pretty good to me. Pinging @showell for final review. I'm also not 100% sure if the Regex change was correct in the stream_data: use regex instead of chaining replace. commit, so if you could check that out, Steve, that would be awesome. Thanks!

@cPhost @lonerz I merged the three test changes.  I decided not to merge the regex change, since it wasn't a clear win in terms of readability.
Thanks!  We're making great progress on testing one of the core JS modules.


Replace phone number verification method to PhoneNumberUtils.isGlobal…

…PhoneNumber
refs #5

Codecov Report

Merging #9 into master will increase coverage by 0.03%.
The diff coverage is 100%.

@@             Coverage Diff              @@
##             master       #9      +/-   ##
============================================
+ Coverage     93.15%   93.18%   +0.03%
  Complexity       74       74
============================================
  Files            16       16
  Lines           219      220       +1
  Branches         13       13
============================================
+ Hits            204      205       +1
  Misses            9        9
  Partials          6        6

Impacted Files
Coverage Δ
Complexity Δ

...ndroid/callconfirm/viewmodel/ConfirmViewModel.java
92.5% <100%> (+0.19%)
11 <0> (ø)
:arrow_down:

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 4429c45...2cc9ee1. Read the comment docs.


Generalize building of LFE

Motivation for this change
This is based on #17240
This only includes LFE generalization. It only includes a derivation for 1.2. I am holding off on 1.3 for now as there is apparently an issue with it.
Things done

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

[ ] NixOS
[x] macOS
[ ] Linux

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

/cc @LnL7 @gleber @yurrriq

We use PropEr for testing, for now anyway, is there a reason you deleted it? The tests won't be able to pass without it.

Also, perhaps noteworthy, is that the Makefile will change dramatically in 1.3 such that the manual buildPhase will likely be obviated. Perhaps we could pass that as an optional parameter to the generic builder.

With that said, thanks for getting this started (and avoiding 1.3 for now).

@yurrriq I skipped the tests because the Erlang and Elixir builds. I also figured, with it being an official release, someone would have run the tests already.
If you believe the tests should be run, I have no issues with putting them back in.

I'm fine with not running tests then. Thanks for the explanation.

@ankhers I would encourage to enable the tests if it's not to much work. It's a nice sanity check to verify that the build doesn't have any broken libraries or missing runtime dependencies.

I have just re-enabled the test suite. I have just noticed though that LFE will not build on R20. It looks like a rebar3 issue though.
14:16:39 {generalize_lfe} nixpkgs$ nix-build -A beam.packages.erlangR20.lfe .
these derivations will be built:
  /nix/store/9w46lxad4w5cm07cc7m3vqrn6zd66zp2-rebar3-3.3.2.drv
  /nix/store/5i7zjx56n67l6rjpjxpyzypp0fvci9zk-proper-1.1.1-beta.drv
  /nix/store/jbli7q5y64s5dwks52cppmygbqmf8fkl-lfe-1.2.1.drv
building path(s) ‘/nix/store/7ypmwa83rb6r89cp2bnibma1c4v656bb-rebar3-3.3.2’
unpacking sources
unpacking source archive /nix/store/rlrfqafz205ky56w6m20cklx829ivvp4-3.3.2.tar.gz
source root is rebar3-3.3.2
setting SOURCE_DATE_EPOCH to timestamp<PHONE_NUMBER> of file rebar3-3.3.2/test/rebar_xref_SUITE.erl
patching sources
applying patch /nix/store/lhxihvmq59av57bjwz8p4qnvylc5wc80-hermetic-bootstrap.patch
patching file bootstrap
applying patch /nix/store/8gs107jn4sl18wca5cjh71ks9w9bpmga-hermetic-rebar3.patch
patching file src/rebar3.erl
patching file src/rebar_hermeticity.erl
patching file src/rebar_pkg_resource.erl
patching file src/rebar_prv_update.erl
postPatch
Bootstrapping Hex Registry for Rebar
/nix/store/r9n8rfy7bmdksh5mha83vz7lxypkviby-erlang-20.0/lib/erlang/lib
configuring
no configure script, doing nothing
building
/private/var/folders/lp/n8j6lzmj5dj34zgzb4zxw35c0000gn/T/nix-build-rebar3-3.3.2.drv-0/rebar3-3.3.2/_build/default/lib/erlware_commons/src/ec_semver_parser.erl:15: Warning: export_all flag enabled - all functions will be exported

builder for ‘/nix/store/9w46lxad4w5cm07cc7m3vqrn6zd66zp2-rebar3-3.3.2.drv’ failed with exit code 1
cannot build derivation ‘/nix/store/jbli7q5y64s5dwks52cppmygbqmf8fkl-lfe-1.2.1.drv’: 1 dependencies couldn't be built
error: build of ‘/nix/store/jbli7q5y64s5dwks52cppmygbqmf8fkl-lfe-1.2.1.drv’ failed

@yurrriq As per the Makefile change, I think it would be better to hold off on changing it in the current generic builder. Once the 1.3 release is fixed and we actually need to accommodate different build phases per version, we can add it then.

Sounds good to me. I can take a crack and getting the tests running and passing, if you like.

The tests are already running and passing. But R20 is causing an issue with build rebar3.

Ah cool. Yeah, we ran into some issues with 1.2 on OTP 20 too. Can we somehow mark it unsupported, i.e. disallow LFE 1.2 builds on OTP 20? The issues will be resolved in 1.3.

Yeah, I can do something for that.
On Jul 12, 2017 1:31 AM, "Eric Bailey"<EMAIL_ADDRESS>wrote:

Ah cool. Yeah, we ran into some issues with 1.2 on OTP 20 too. Can we
somehow mark it unsupported, i.e. disallow LFE 1.2 builds on OTP 20? The
issues will be resolved in 1.3.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/NixOS/nixpkgs/pull/27295#issuecomment-314652436, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAt0wgf0WXa7r6OwxoMuVYEUE81c33xlks5sNFpCgaJpZM4OTlJB
.

Is there anything else that should be done for this PR to be merged?


Is a release of the 1.1.4 for Jakarta planned?

Hi team.
We use this library with Spring Boot 2.x and now we are going to migrate to Spring Boot 3.x.
Do you have any plan about jakarta-based release?

@alexandrklimov I recommend using https://github.com/threeten-jaxb/threeten-jaxb which supports jakarta namespace. I will close this repository soon

@Kalstad
Got it! Thanks a lot!


Redis Connector failing when initialized as in sample

Describe the bug
When using the newly introduces redis connector as described in the quickstart it crashes when accessing the memory.
This is just a documentation issue as far as I see it.
To Reproduce
Steps to reproduce the behavior:

initialize redis connector as in sample
try to access memory

Exception:
Microsoft.Bot.Builder.Integration.AspNet.Core.IBotFrameworkHttpAdapter[0]
[OnTurnError] unhandled error : Cannot access a disposed object.
Object name: 'DELL5B70FK3(SE.Redis-v<IP_ADDRESS>123)'.
System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'DELL5B70FK3(SE.Redis-v<IP_ADDRESS>123)'.
at StackExchange.Redis.ConnectionMultiplexer.ExecuteAsyncImpl[T](Message message, ResultProcessor`1 processor, Object
[...]

I think it eventually disposes something the redis memory connector needs to work. In my application there is some time between initialization and usage as I'm waiting for some user input.
Fix
remove using before Connection multiplexer.
old:
using ConnectionMultiplexer connectionMultiplexer = await ConnectionMultiplexer.ConnectAsync("localhost:6379");

new:
ConnectionMultiplexer connectionMultiplexer = await ConnectionMultiplexer.ConnectAsync("localhost:6379");

Expected behavior
Should not crash and access the memory.
Desktop (please complete the following information):

OS: Windows
IDE: VS2022
NuGet Package: Microsoft.SemanticKernel.Connectors.Memory.Redis
NuGet Package version: 0.15.230609.2-preview

Additional context
Sample code in quick Start 2. seems broken
Redis Connector quickstart

The document simply demonstrates how to use it quickly, similar to Example47_Redis.cs. ConnectionMultiplexer should typically be used as a singleton in an application, as a best practice. It is recommended to dispose the instance after use. Additionally, when writing this README.md, I instinctively believed that users should first understand how to use ConnectionMultiplexer.
https://github.com/microsoft/semantic-kernel/blob/e4781e51d4e8fea5f6beb85823272e305183372c/samples/dotnet/kernel-syntax-examples/Example47_Redis.cs#L12-L77


Add note that publishtrimmed enables source generators

Fixes #38555.

Internal previews

📄 File
🔗 Preview link

docs/core/deploying/trimming/trimming-options.md
Trimming options

docs/core/whats-new/dotnet-8/runtime.md
What's new in .NET 8 runtime

@sbomer Can you answer this question? ^^


Add unit tests for InstallController

Codecov Report

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

@@            Coverage Diff             @@
##           master    #1305      +/-   ##
==========================================
- Coverage   93.67%   93.31%   -0.37%
==========================================
  Files          44       44
  Lines        4602     4680      +78
  Branches      503      786     +283
==========================================
+ Hits         4311     4367      +56
+ Misses        291      289       -2
- Partials        0       24      +24

Impacted Files
Coverage Δ

browser/model/devstudio-autoinstall.js
97.29% <0%> (-2.71%)
:arrow_down:

browser/services/request.js
97.61% <0%> (-2.39%)
:arrow_down:

browser/model/helpers/downloader.js
95.53% <0%> (-1.68%)
:arrow_down:

browser/model/che.js
95% <0%> (-1.62%)
:arrow_down:

browser/services/platform.js
97.05% <0%> (-1.41%)
:arrow_down:

browser/pages/account/controller.js
98.61% <0%> (-1.39%)
:arrow_down:

browser/model/cdk.js
98.74% <0%> (-1.26%)
:arrow_down:

browser/model/devstudio-p2-zip.js
64.4% <0%> (-1.12%)
:arrow_down:

browser/model/devstudio-central-p2-zip.js
60.31% <0%> (-0.98%)
:arrow_down:

browser/model/jdk-install.js
93.15% <0%> (-0.9%)
:arrow_down:

... and 22 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 4378f62...f706367. Read the comment docs.


Unify Estimator/ Controller Framework

Most of us are using this as a research platform and it really is rather difficult to setup a new estimator/ controller to compare against existing methods. I'd like to propose that we create a unifying framework that just requires the user to derive from a base class and implement a few functions.
This would allow even newcomers to quickly test out their ideas. For example, this would be the end user code:
https://github.com/dronecrew/Firmware/blob/lqg_quad/src/modules/lqg_quad/BlockEst.hpp
https://github.com/dronecrew/Firmware/blob/lqg_quad/src/modules/lqg_quad/BlockEst.cpp
Proposed Base Class for attitude/position estimators:
https://github.com/dronecrew/Firmware/blob/lqg_quad/src/modules/controllib/estimators/BlockAttPosEst.hpp
https://github.com/dronecrew/Firmware/blob/lqg_quad/src/modules/controllib/estimators/BlockAttPosEst.cpp

@jgoppert I guess its as always a matter of preference. I also regularly meet developers who feel choked by having to use a base class and just want to pub/sub. I think within the scope of our core dev efforts it however makes certainly sense to put more effort into consolidating onto frameworks.

I think we have shown just having the standardized messages is good enough.


Add pledge()

Just a quick extra bit that can be done before putting out a rc would be adding a pledge() section during initialization as well as making sure it can compile on OPBSD

File I/O preventing porting. Compiles fine W/O warnings with few changes, but fails to run if compiled with file.c


MSSQL, Error: sync database struct error: mssql: Invalid object name 'SYS.INDEXES'.

Gitea version (or commit ref): 1.12.6 (same error on 1.13.0-rc2)
Git version: 2.15.1
Operating system: Microsoft Server 2012 R2

Database (use [x]):

[ ] PostgreSQL
[ ] MySQL
[x] MSSQL v2017
[ ] SQLite

Can you reproduce the bug at https://try.gitea.io:

[ ] Yes (provide example URL)
[ ] No
[x] Not relevant

Log gist:

Description
I am trying to install gitea 1.12.6 on SQL Server 2017. I have database and user using the following query:
CREATE DATABASE giteadb
ALTER DATABASE giteadb COLLATE SQL_Latin1_General_CP1_CS_AS

USE master
CREATE LOGIN giteauser WITH PASSWORD=N'giteapass', DEFAULT_DATABASE=giteadb, CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
ALTER AUTHORIZATION ON DATABASE::giteadb TO giteauser

When I click 'Install Gitea' from localhost:3000, a bunch of tables are generated in the database but then I get the below error.
...
Log
2020/11/18 09:31:03 ...dules/setting/log.go:279:newLogService() [I] Gitea Log Mode: File(File:info)
2020/11/18 09:31:03 ...les/setting/cache.go:70:newCacheService() [I] Cache Service Enabled
2020/11/18 09:31:03 ...les/setting/cache.go:81:newCacheService() [I] Last Commit Cache Service Enabled
2020/11/18 09:31:03 ...s/setting/session.go:63:newSessionService() [I] Session Service Enabled
2020/11/18 09:31:03 routers/init.go:63:initDBEngine() [I] Beginning ORM engine initialization.
2020/11/18 09:31:03 routers/init.go:70:initDBEngine() [I] ORM engine initialization attempt #1/10...
2020/11/18 09:31:03 ...rm/session_schema.go:25:Ping() [I] PING DATABASE mssql
2020/11/18 09:31:03 ...eue/queue_wrapped.go:75:setInternal() [W] [Attempt: 1] Failed to create queue: level for notification-service cfg: queue.LevelQueueConfiguration{ByteFIFOQueueConfiguration:queue.ByteFIFOQueueConfiguration{WorkerPoolConfiguration:queue.WorkerPoolConfiguration{QueueLength:20, BatchLength:20, BlockTimeout:1000000000, BoostTimeout:300000000000, BoostWorkers:5, MaxWorkers:6}, Workers:1, Name:"notification-service-level"}, DataDir:"D:\\gitea\\var\\lib\\gitea\\data\\queues\\notification-service"} error: The process cannot access the file because it is being used by another process.
2020/11/18 09:31:03 ...m.io/xorm/core/db.go:154:QueryContext() [I] [SQL] select * from sysobjects where id = object_id(N'version') and OBJECTPROPERTY(id, N'IsUserTable') = 1 [] - 3.9997ms
2020/11/18 09:31:03 ...m.io/xorm/core/db.go:277:ExecContext() [I] [SQL] IF NOT EXISTS (SELECT [name] FROM sys.tables WHERE [name] = 'version' ) CREATE TABLE [version] ([id] BIGINT PRIMARY KEY IDENTITY NOT NULL, [version] BIGINT NULL); [] - 12.0016ms
2020/11/18 09:31:03 ...m.io/xorm/core/db.go:154:QueryContext() [I] [SQL] SELECT "COLUMN_NAME" FROM "INFORMATION_SCHEMA"."COLUMNS" WHERE "TABLE_NAME" = ? AND "COLUMN_NAME" = ? [version id] - 32.998ms
2020/11/18 09:31:03 ...m.io/xorm/core/db.go:154:QueryContext() [I] [SQL] SELECT "COLUMN_NAME" FROM "INFORMATION_SCHEMA"."COLUMNS" WHERE "TABLE_NAME" = ? AND "COLUMN_NAME" = ? [version version] - 14.0031ms
2020/11/18 09:31:03 ...m.io/xorm/core/db.go:154:QueryContext() [I] [SQL] SELECT TOP 1 [id], [version] FROM [version] WHERE [id]=? [1] - 997.5µs
2020/11/18 09:31:03 ...m.io/xorm/core/db.go:154:QueryContext() [I] [SQL] INSERT INTO [version] ([version]) OUTPUT Inserted.id VALUES (?) [141] - 2.9998ms
2020/11/18 09:31:03 ...m.io/xorm/core/db.go:154:QueryContext() [I] [SQL] select name from sysobjects where xtype ='U' [] - 2.0005ms
2020/11/18 09:31:03 ...eue/queue_wrapped.go:75:setInternal() [W] [Attempt: 2] Failed to create queue: level for notification-service cfg: queue.LevelQueueConfiguration{ByteFIFOQueueConfiguration:queue.ByteFIFOQueueConfiguration{WorkerPoolConfiguration:queue.WorkerPoolConfiguration{QueueLength:20, BatchLength:20, BlockTimeout:1000000000, BoostTimeout:300000000000, BoostWorkers:5, MaxWorkers:6}, Workers:1, Name:"notification-service-level"}, DataDir:"D:\\gitea\\var\\lib\\gitea\\data\\queues\\notification-service"} error: The process cannot access the file because it is being used by another process.
2020/11/18 09:31:03 ...m.io/xorm/core/db.go:154:QueryContext() [I] [SQL] select a.name as name, b.name as ctype,a.max_length,a.precision,a.scale,a.is_nullable as nullable,
			  "default_is_null" = (CASE WHEN c.text is null THEN 1 ELSE 0 END),
		      replace(replace(isnull(c.text,''),'(',''),')','') as vdefault,
			  ISNULL(p.is_primary_key, 0), a.is_identity as is_identity
	          from sys.columns a
			  left join sys.types b on a.user_type_id=b.user_type_id
	          left join sys.syscomments c on a.default_object_id=c.id
			  LEFT OUTER JOIN (SELECT i.object_id, ic.column_id, i.is_primary_key
				FROM sys.indexes i
			  LEFT JOIN sys.index_columns ic ON ic.object_id = i.object_id AND ic.index_id = i.index_id
				WHERE i.is_primary_key = 1
			) as p on p.object_id = a.object_id AND p.column_id = a.column_id
	          where a.object_id=object_id('user') [] - 88.9988ms
2020/11/18 09:31:03 ...m.io/xorm/core/db.go:154:QueryContext() [I] [SQL] SELECT
	IXS.NAME                    AS  [INDEX_NAME],
	C.NAME                      AS  [COLUMN_NAME],
	IXS.is_unique AS [IS_UNIQUE]
	FROM SYS.INDEXES IXS
	INNER JOIN SYS.INDEX_COLUMNS   IXCS
	ON IXS.OBJECT_ID=IXCS.OBJECT_ID  AND IXS.INDEX_ID = IXCS.INDEX_ID
	INNER   JOIN SYS.COLUMNS C  ON IXS.OBJECT_ID=C.OBJECT_ID
	AND IXCS.COLUMN_ID=C.COLUMN_ID
	WHERE IXS.TYPE_DESC='NONCLUSTERED' and OBJECT_NAME(IXS.OBJECT_ID) =?
	 [user] - 1.0002ms
2020/11/18 09:31:03 routers/init.go:76:initDBEngine() [E] ORM engine initialization attempt #1/10 failed. Error: sync database struct error: mssql: Invalid object name 'SYS.INDEXES'.
2020/11/18 09:31:03 routers/init.go:77:initDBEngine() [I] Backing off for 3 seconds
2020/11/18 09:31:03 ...eue/queue_wrapped.go:75:setInternal() [W] [Attempt: 3] Failed to create queue: level for notification-service cfg: queue.LevelQueueConfiguration{ByteFIFOQueueConfiguration:queue.ByteFIFOQueueConfiguration{WorkerPoolConfiguration:queue.WorkerPoolConfiguration{QueueLength:20, BatchLength:20, BlockTimeout:1000000000, BoostTimeout:300000000000, BoostWorkers:5, MaxWorkers:6}, Workers:1, Name:"notification-service-level"}, DataDir:"D:\\gitea\\var\\lib\\gitea\\data\\queues\\notification-service"} error: The process cannot access the file because it is being used by another process.

Ah
I think this might be due to the capitalisation.
WHY MSSQL WHY?

@lunny this is a XORM bug.
When you use "CS_AS" collation for the MSSQL database, you should use "SELECT * FROM sys.indexes" but not "SYS.INDEXES"

Fixed by https://gitea.com/xorm/xorm/pulls/2389 and merged into Gitea.


Aimsun training not working when loading a template via load.py

Bug Description
In core/kernel/vehicle/aimsun.py, in _add_departed:

RL vehicles generated by Aimsun (via arbitrary type name "rl" for instance) are not associated to an RLController class in Flow, thus they are not really RL vehicles

all vehicles are added in self.__human_ids, which is not true for RL vehicles

It is the same if we want some human vehicles to be controlled by Flow - we need to define an arbitrary type name to Flow controller mapping in order to assign the right controllers.

this is pretty outdated and likely resolved (a lot of work has gone into load.py since)


Kafka: can we just use the uid and not name

Proposed Changes

do not use name from DeprecatedRef of subscription, use uid for kafka subs.

spec.DeprecatedRef will be removed.
Release Note

name changes to uid for subscriptions in kafka.

Why?

the code uses a deprecated field that will be deleted in the next version.

This is kinda conflicting with https://github.com/knative/eventing-contrib/pull/762
One reason for doing the above is that with UID, the name of the consumer group is not stable when (re)creating the subscription.
/cc @yuzisun

Question is: Do we really need stable consumer group names? when we (re)create subscriptions?
To some degree the usage of consumer group (for subscription) is an impl. detail. and it's an internal client only, that's being used to consume things from the topic for redelivery.

The question is: Do we have any specification of what the Channel should behave when a destination removes the subscription and subscribe again?

With #762 it doesn't resend messages already sent
With this one it resend everything from the beginning of the topic (which could not be the beginning of the events flow, since topics clears periodically old messages)

How the other implementations behaves?

How the other implementations behaves?

Others would treat a new subscription with the same name as a new and unique subscription. There is no recreating the original subscription. It got deleted and there for it is gone. This is only true for channels. In Pub/Sub, you can make a pull subscription directly and recreate with an existing subscription id and it would be the same, and it is independent of the name of that subscription.
PubSub:
Channel makes a Topic and PullSubscriptions
But you can make Topic and PullSubscription directly and fill the required fields yourself. The channel impl makes the choice that new subscriptions are always unique.

@n3wscott Can we document that behaviour somewhere, like in the Channel spec document?

@n3wscott Can we document that behaviour somewhere, like in the Channel spec document?

I think it should be up to the channel task force... But this has not come up?

@n3wscott let's discuss about it at the next one :+1: I've added it in the document

@n3wscott I've added this item to the agenda for the Thursday call on the channel Spec group !

Kafka is a streaming logging system not a pubsub system, the message still stays on broker after it is consumed and each consumer group maintains its own offset so they can consume at different pace. I understand for a pubsub system we can use UID but for Kafka it is important to have a stable consumer group for a given destination. If UID is used it would resend all the messages over again from beginning offset when subscription is recreated which is a big no for production environment.

I agree with @yuzisun, IMO the behaviour should be: when the channel receives the message, all subscribers should receive at least once the message; then the channel could eventually forget the message. In the particular case of Kafka, this translates into having a single consumer group per channel, where the offset is marked when the message is correctly delivered.
Again, I think this should be well defined in the Channel specification (including what we mean in this context for message correctly delivered.

a single consumer group per channel

Can you help me understand how a single consumer group per channel would work? Not saying it wouldn't, I'm just wondering, if I have many subscribers at different offsets, how does the channel implementation track the offsets for those subscribers?

/lgtm
reference: was discussed in the channel WG call today. See note from @vaikas
https://github.com/knative/eventing-contrib/issues/809#issuecomment-572643926

@grantr I was wrong because i didn't took into account auto.offset.reset = latest :smile: what I mean is: the behaviour I expect is that every time i subscribe, i don't restart processing from the beginning of the topic. But with the actual configuration of the consumer (the default one) the dispatcher starts processing from the latest message: https://github.com/Shopify/sarama/blob/master/config.go#L435

@slinkydeveloper is really there no way to specify that when a consumer is created to Kafka that it will start from 'now' not from the beginning?

@slinkydeveloper is really there no way to specify that when a consumer is created to Kafka that it will start from 'now' not from the beginning?

Let's say consumer group A consumed offset up to 10, now subscription is deleted and recreated it then creates a totally new consumer group B in which case current offset does not exist, yes we can specify I want to consume from the latest offset but at that time it might be already 15 and you would lose the messages between 10-15, what's why you need a stable consumer group which can resume from 10.

Right, so what I'm saying is that if we can rationalize for the sake of moving forward a following behaviour:

When a new Subscription is created, it will get events from that point forward. So, in this case, you would start at 15.
We have a way to specify Channel Implementation specific features in a more generic way. For the time being you could use annotations to explicitly specify the consumer group you want (which is more flexible than implicitly (and with no way to override)).

Current assumption

Right, so what I'm saying is that if we can rationalize for the sake of moving forward a following behaviour:

When a new Subscription is created, it will get events from that point forward. So, in this case, you would start at 15.
We have a way to specify Channel Implementation specific features in a more generic way. For the time being you could use annotations to explicitly specify the consumer group you want (which is more flexible than implicitly (and with no way to override)).

Current assumption

+1,  I did not know you can specify consumer group via annotation :).

/retest


Bug Description
Test
Logs
Test
Screenshots
No response
Additional Environment Information
No response
Steps to Reproduce
Test
Expected Behavior
Test
CSM Driver(s)
Test
Installation Type
No response
Container Storage Modules Enabled
No response
Container Orchestrator
Test
Operating System
Test

test defect clearing milestone


Update doc examples

The documentation examples should be updated (using old style gtk).

What does that mean exactly?

Ah yes, using gtk::Application for everything. I thought we had an issue for that already.

Fixed by #731.


More Flexible Circuit-breaker Strategy

RIght now the circuit-breaker implementation is fixed.
Expose a CircuitBreakerStrategy to allow custom implementations that can be plugged in.

This seems like a useful addition to me too.  Updating milestone to 1.5.x

I am also looking for a way to customize the circuit breaker logic. Currently HystrixCircuitBreaker has a hardcoded implementation. I'm really looking forward to being able to customize how the circuit breaker works.

Would this also permit for a circuit breaker to be shared amongst multiple commands?

Is there any plan to support this in the near future?

This is still a nice-to-have, but we don't have a pressing need for it at the moment.  Given that, no one is actively working on it.  If you're interested in working on it, we can discuss how it might work.

Sure, I will be interested in working on this. Please let me know how this might work and how I can have the approach validated.
Also, I wanted to share my requirement and see if there are any alternatives other than introducing the custom circuit breaker strategy -
I want to have the circuit marked open on specific error codes (or specific HTTP status codes). If I forceOpen the circuit on such error codes, single requests are not allowed with current implementation of circuit breaker. So I wanted to inject a circuit breaker implementation that does the following:

isOpen() - can detect if the circuit is open using my custom logic (let's say based on a status from db or cache that were populated based on service error codes or http status codes, but not using the metrics and health count). A centralized status of circuit is primarily needed as I want to make the entire cluster aware of the dependent system's state so the circuit is open for all the instances of the app on the cluster(s). (As soon as one instance detects an error/status code, it updates db and something like a circuit state property, backed by archaius polled configuration that populates from DB source, distributes it to all instances)

allowRequest() - uses isOpen() as in the default implementation, but allows single requests even if the circuit is force closed. There are scenarios where a circuit cannot remain force closed beyond a time limit and wanted to have the single requests to go through at periodic intervals so it can markSuccess eventually when it succeeds

markSuccess() - Resets the custom circuit state in db

@mcmadhan Great - would love to see this get done and happy to provide feedback.
The general constraints that exist today are:

The HystrixCircuitBreaker interface: It has the 3 methods you mentioned above.  If you need new/different methods, let's discuss that as early as possible to what we can do.
Currently, the instance of HystrixCircuitBreaker is selected per-command key and then cached for all command instances with that key.  This CircuitBreaker instance is selected in the AbstractCommand constructor and not explicitly passed in.

For your specific implementation, I think you are correct that adding custom circuit-breaker configuration is the way to go.
A note about your proposed circuit-breaker: We have explicitly decided that the implementation of circuit-breaker should not share state across instances.  This introduces another service dependency and may itself see failures/latency.  That's not to say that your solution will not work- just that you'll need to take care in its design.
Please let me know if I can help review code/ideas

@mattrjacobs: Thank you for the detailed comment. I understood the details of current implementation and constraints. One another  constraint is, HystrixCommand and HystrixObservableCommand do not have a public constructor that allow injection of a custom circuit breaker (There is a constructor that takes everything but is with package level scope/access modifier).
So, here is what I am thinking to add to allow custom cb strategy:
Add a public constructor to allow injection of the following in both HystrixCommand and HystrixObservableCommand:

HystrixCommandKey (to stick to CB per command behavior )
Custom CB implementation and
(optional) com.netflix.hystrix.HystrixCommand.Setter to pass other properties

I see everything else gets defaulted in AbstractCommand.
Please let me know your thoughts on this.
Other than this, I think it is best to have CB implementation generic and introduce an interface where the custom logic can be implemented and injected into the CB impl. Below is a sudo code that gives an overall idea, please review and share your thoughts.
public class SampleCircuitBreakerImpl implements HystrixCircuitBreaker {

  /* interface to be introduced with isHealthy() and markHealthy() methods that can have a custom impl to track circuit status*/
  private CircuitHealthProvider circuitHealthProvider;

  @Override
	public boolean allowRequest() {
    return !isOpen()  || allowSingleTest()
  }

  private boolean allowSingleTest() {
	  // Similar to current impl in HystrixCircuitBreakerImpl
	}

  @Override
  public boolean isOpen() {
       boolean isHealthy = circuitHealthProvider.isHealthy();
       // TODO: use isHealthy to determine current status and update cached circuit status
       // TODO: Update last tested or opened timestamp
  }

  @Override
  public boolean markSuccess() {
       //  TODO: When a request turns good after being open for long
       circuitHealthProvider.markHealthy();
       //  TODO: Reset cached circuit status
  }
}

Thanks,
Madhan

Both HystrixCommand and HystrixObservableCommand already permit a constructor with Setter. Setter also includes the HystrixCommandKey.  So I'm not sure you need to add constructors with those arguments.  Maybe you could provide examples of what API additions you're considering?
For the circuit breaker, I'm not convinced that passing it at constructor time is the best idea.  That would put a lot of work onto the people writing Hystrix commands.  In many other places in the system (concurrency strategy, metrics publisher, properties strategy, etc), the decision is made once per application and installed up-front in a plugin.  Are you envisioning all commands in a system using the same circuit-breaker behavior or possibly each using an independent implementation?

For the CircuitHealthProvider idea, this seems mostly like renaming the CircuitBreaker terminology into a new set of terms.  What do you gain by introducing this class?

I see this issue is almost dead. If we agree that passing CB in the Setter or providing custom CircuitBreakerKey or resolution strategy is a good idea I can contribute is.

@mattrjacobs Any feedback?

I think passing the circuit breaker in the Setter is the least disruptive change.  Thanks for taking a look!

@mattrjacobs The problem with such approach is that it's good to be able to use the HystrixCircuitBreakerImpl. However, it uses metrics, that are initialized in the Command. It looks like the best way to solve this issue is simply pass the circuitBreakerKey, which by default is set to the HystrixCommandKey. It could be passed by the Setter


Add support for personal message triggers for outgoing webhooks

Automated message from Dropbox CLA bot
@vabs22, it looks like you've already signed the Dropbox CLA. Thanks!

In the interest of expediency, I updated the comment change suggested above, replaced get_user_profile_by_email with self.example_user, and merged this.  Thanks @vabs22!!


Comments and likes section do not get updated after adding a new post (MERN Social, chapter05)

Hi, I have found an issue that is a bug. Short description:
GIVEN: User is logged AND Home page is opened AND There are older posts visible with comments and likes (e.g 1 like and 1 comment for the latest post)
WHEN: User adds new post
THEN: New post should not have any likes nor comments
New post is displayed on top of the previous comments and likes
Video available on request.

Hi @90sidort,
This consecutive post creation issue is happening due to an incomplete implementation. It wasn't covered in the book because it can be completed by extending the example of adding and removing posts. Basically, every time there is an update to a like or comment in a Post, we should also be updating the list of posts passed from the newsfeed.
You could do the following to complete this implementation:

uncomment these lines: https://github.com/PacktPublishing/Full-Stack-React-Projects-Second-Edition/blob/master/Chapter05/mern-social/client/post/Post.js#L65 and update it so this useEffect only runs when the post changes:

useEffect(() => {
    setValues({...values, like:checkLike(props.post.likes), likes: props.post.likes.length, comments: props.post.comments})
  }, [props.post])

add an update function to the Newsfeed component that gets passed along through PostList to Post and is called when a like or comment is added/removed. This function could look as follows:

const updatePost = (newPost, index) => {
    const updatedPosts = [...posts]
    updatedPosts[index] = newPost
    setPosts(updatedPosts)
  }

This implementation is applied in the demo that I have hosted: social2.mernbook.com
Let us know if you find more issues or this needs more clarifications.


Adds types field to .d.ts

https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html

Codecov Report

Merging #95 into master will not change coverage.
The diff coverage is n/a.

@@          Coverage Diff          @@
##           master    #95   +/-   ##
=====================================
  Coverage     100%   100%
=====================================
  Files         107    107
  Lines        2501   2501
  Branches      554    554
=====================================
  Hits         2501   2501

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 8d0230f...320a7da. Read the comment docs.

There used to be a problem with some of our projects with this, but I tried it again and it seems to work now.


Ignore invalid virtualViewId

Some times we were being passed in 0x7fffffff instead of the HOST_ID
(-1) that we were expecting.
This fixes #466.

Coverage decreased (-0.3%) to 34.385% when pulling<PHONE_NUMBER>a8cb942f9be3a4f928d84d194c950d on kruton:190-fixes into d1d73623f44546a137bd4ce0f8c168928b16d742 on connectbot:master.

Coverage decreased (-0.2%) to 34.418% when pulling<PHONE_NUMBER>a8cb942f9be3a4f928d84d194c950d on kruton:190-fixes into d1d73623f44546a137bd4ce0f8c168928b16d742 on connectbot:master.


Add the possibility of to save the data with hostpath.

Sonarqube will not have more than one instance at a time, I want it to always run on a node and within that node save the information with hostpath, I do not want PVC or PV, I want to directly access the host disk to save it and it will go very quickly , easy and without intermediaries (Storage Provider).
Please ensure your pull request adheres to the following guidelines:

[x] Document your Changes in the CHANGELOG.md file of the respected chart as well as the Chart.yaml

Hi @jbazp.
Thank you for your contribution. It looks like a cool improvement.
Could you please rebase your branch against the current master and provide a testing values.yaml under tests/unit-compatibility-test/sonarqube?
Can you also replicate this to the sonarqube-dce chart?

Hi @davividal! I made the changes you requested me, Can you check again?

Yes! First, I created the values.yaml files:

tests/unit-compatibility-test/sonarqube/host-path-values.yaml]
tests/unit-compatibility-test/sonarqube-dce/host-path-values.yaml
And finally, I ran .cirrus/generate_helm_fixtures.sh locally and it genereted me the following files:
tests/unit-compatibility-test/fixtures/sonarqube/host-path-values.yaml
tests/unit-compatibility-test/fixtures/sonarqube-dce/host-path-values.yaml


github-desktop fails to install

Tried to install the Github-Desktop cask recently, and here is the result :

brew cask install github-desktop                                                                                [10:11:44]
==> Downloading https://d4hwcs1zqtwzs.cloudfront.net/mac/GitHub Desktop 210.zip
######################################################################## 100.0%
==> Symlinking App 'GitHub Desktop.app' to '/Users/fabien/Applications/GitHub Desktop.app'
==> Symlinking Binary 'github_cli' to '/usr/local/bin/github'
Error: Permission denied - /usr/local

Do a brew cask update and brew doctor, I see no errors:
[~] > brew cask install github-desktop
==> Downloading https://d4hwcs1zqtwzs.cloudfront.net/mac/GitHub%20Desktop%20210.
######################################################################## 100.0%
==> Symlinking App 'GitHub Desktop.app' to '/Users/aditya/Applications/GitHub De
==> Symlinking Binary 'github_cli' to '/usr/local/bin/github'
🍺  github-desktop staged at '/opt/homebrew-cask/Caskroom/github-desktop/210' (1405 files, 59M)

@fculpo If the issue persists, please open a new issue but follow the procedure.

I has not having this exact problem but was getting errors trying to install github-desktop today. After brew update && brew upgrade && brew doctor then the install worked fine for me tonight. More of an FYI than useful, helpful information for your issue probably.