Port traffic redirection with logic bypass

Hi,
I would like to benchmark SwitchML on an emulated topology bigger than that of a single rack. To do so, I plan to reuse the same Tofino switch(APS Networks BF2556X-1T) with SwitchML deployed on it and redirect all traffic coming in from a specific port into another port without any processing done. That port would then be physically connected to yet another port which will consume the traffic regularly via the SwitchML logic.
I was wondering whether this is something that is already possible with the existing P4 model and SwitchML controller program? If not, is there a way I could modify the Forwarder table in forwarder.p4 (populated via the forwarder.py on the control plane) to accommodate this functionality without messing the underlying SwitchML logic? Practically, I need the traffic from that specific port to bypass the SwitchML aggregation logic in the switch and just be redirected out of another port (and vice versa for the return journey). From what I understand, currently, the forwarder table matches on ethernet addresses. Could this be somehow extended to accommodate the case without jeopardizing the underlying functionality of the P4 program?
Thank you,

Hi,
the current code doesn't support this, but I think it would be a useful feature. A user might want to disable SwitchML processing on some specific port as you suggest, and this should be achieved by setting a parameter in the controller (like with an additional CLI command).
I think that this can be easily done with a change to the parser logic (I think that we cannot do this in the control block, because it would add a dependency that would make the program not fit in the 12 stages).
Regular (not-to-be-processed) packets are marked in the parser with packet_type_t.IGNORE;
https://github.com/p4lang/p4app-switchML/blob/7ded628eb31a86e80ad0bf65e72a3e94e0e13d05/dev_root/p4/parsers.p4#L204-L209
and this flag makes the packet skip the SwitchML processing logic and go to the forwarder table that forwards regular traffic using the dst mac address.
You cannot achieve what you ask by simply changing the forwarder table, because you need first to skip the processing logic to reach that table. If you look at the main Ingress control block
https://github.com/p4lang/p4app-switchML/blob/7ded628eb31a86e80ad0bf65e72a3e94e0e13d05/dev_root/p4/switchml.p4#L137-L138
you can see that the forwarder table, which is in charge of forwarding regular traffic, is only applied for packet types that are not ig_md.switchml_md.packet_type >= packet_type_t.CONSUME0 (packet_type_t.IGNORE is less than packet_type_t.CONSUME0).
The packet_type definition is here
https://github.com/p4lang/p4app-switchML/blob/7ded628eb31a86e80ad0bf65e72a3e94e0e13d05/dev_root/p4/types.p4#L142.
The parser code is marking as packet_type_t.CONSUME0 all the RDMA UC packets and UDP packets with dst port in the interval [0xbee0, 0xbeef].
So we need to modify the parser to mark packets from the chosen port as IGNORE, even if they are of these types. We still need to extract the ethernet header though, to use the dst mac address in the forwarder table.
The way that I think is best suited to do this is to use port metadata, which is a feature available in the parser.
There is one example on how to use the port metadata feature in the Open-Tofino repo here.
Each ingress hardware port can be associated with a small amount of static data that is prepended to each packet in the ingress pipeline. These metadata can be set by the controller for each port differently. The port metadata header is the first header that the parser sees in a packet, even before ethernet.
The controller could set a processing type in the port metadata for each port (something like SKIP, PROCESS, or RECIRCULATE). Then the parse_port_metadata parser can select the next parser state using this value (RECIRCULATE ➝ parse_recirculate, else ➝ parse_ethernet). Then the parse_ethernet stage can use this value, and if it is SKIP, transition to accept_regular, which would make it skip the processing logic and reach the forwarder table.
This solution is also the one to use to avoid hardcoding the ports to use for recirculation, like the parse_port_metadata parser is doing now. This would allow to use any port for recirculation, and would allow to have a folded pipe option also on 2-pipes switches like yours.
Currently, the port metadata is only used to set 2x16 bits values for the drop simulator (used to randomly drop a chosen percentage of the packets, to test the retransmission logic). These values are set by the controller, per port, in drop_simulator.py.
https://github.com/p4lang/p4app-switchML/blob/7ded628eb31a86e80ad0bf65e72a3e94e0e13d05/dev_root/controller/drop_simulator.py#L28
We can use up to 64 bits for the port metadata, so there is plenty of space to add the flag we need.

Hi,
Thank you very much for the detailed response and for providing an overview of the proposed solution.
I understand that two modifications are needed in order to support the said case. First, we need to modify the ingress parser in order to skip the processing logic for all packets coming from a specific port. I understand that the method you explained of utilizing the port metadata available at the parse, would be the best way of doing this giving the ability to the controller to dynamically select the port that its traffic would skip the processing logic. However, in order to test our my setup until such a full flex feature is implemented, could I just include something like this
state parse_port_metadata {
        // parse port metadata
        ig_md.port_metadata = port_metadata_unpack<port_metadata_t>(pkt);

        transition select(ig_intr_md.ingress_port) {
            45: parse_ethernet; // custom port for bypassing SwitchML logic
            64: parse_recirculate; // pipe 0 CPU Eth port
            68: parse_recirculate; // pipe 0 recirc port
            320: parse_ethernet;   // pipe 2 CPU PCIe port
            0x080 &&& 0x180: parse_recirculate; // all pipe 1 ports
            0x100 &&& 0x180: parse_recirculate; // all pipe 2 ports
            0x180 &&& 0x180: parse_recirculate; // all pipe 3 ports
            default:  parse_ethernet;
        }
    }

in the parse_port_metadata state where for example I would be statically setting the device port 45 for bypassing the regular processing by transitioning to parse_ethernet as the next stage which already includes a default action for accept_regular. Would something like this work?
The second necessary modification would then be to change the forwarder table in order to match the ingress port besides the destination mac address and populate it with a rule that will push traffic from the ingress port 45 I used in my example previously, to another specific port which I'll be using for forwarding the packets out of the switch. This should be possible, right?
Thank you again,

Thanks again for the input.
I have indeed modified the parse_ethernet parser as you suggested. However, I'm having a bit of difficulty setting the forwarder table right. I have modified the table as follows:
table forward {
        key = {
            hdr.ethernet.dst_addr : exact;
            ig_intr_md.ingress_port : exact;
        }
        actions = {
            set_egress_port;
            flood;
        }
        size = forwarding_table_size;
    }

in order to be able to match to the ingress port beside the dst address. However, I'm not sure how to properly configure the table. When I'm populating the table through the controller with a simple rule for forwarding from one port to another with the following:
 self.table.entry_add(self.target, [
            self.table.make_key(
                [self.gc.KeyTuple('ig_intr_md.ingress_port', ingress_dev_port)])
        ], [
            self.table.make_data([self.gc.DataTuple('egress_port', egress_dev_port)],
                                 'Ingress.forwarder.set_egress_port')
        ])

I end up with a rule being written in the table (along with the regular entries the controller populates the forwarder table) which looks like this:
Entry 1:
Entry key:
    hdr.ethernet.dst_addr          : 0x000000000000
    ig_intr_md.ingress_port        : 0x2D
Entry data (action : Ingress.forwarder.set_egress_port):
    egress_port                    : 0x91

Doing a simple ping from the device on the port in question doesn't seem to be redirecting the traffic via the port looping (the frame counter for these ports remain at 0 and I have enabled the relevant ports from the controller) which suggest the rule is not triggered.
I was thinking if I could insert a rule with a wildcard (like *) for the dst_addr part of the key when it matches to the ports but I'm not sure if this is possible. I also cannot set the matching method for both keys to lpm. Any ideas would be welcomed. Thank you.

Hi,
in your code to add the rule you are missing the value of the dst address you want to match on, so the rule is getting a default value of all zeros, that won't match any packet. This is how you can add a rule with both match fields (replace MAC_ADDRESS with the value you need):
        self.table.entry_add(self.target, [
            self.table.make_key([
                self.gc.KeyTuple('hdr.ethernet.dst_addr', MAC_ADDRESS),
                self.gc.KeyTuple('ig_intr_md.ingress_port', ingress_dev_port)])
        ], [
            self.table.make_data([self.gc.DataTuple('egress_port', egress_dev_port)],
                                 'Ingress.forwarder.set_egress_port')
        ])

To add a rule with a wildcard, you can use ternary match, like this table does:
https://github.com/p4lang/p4app-switchML/blob/7ded628eb31a86e80ad0bf65e72a3e94e0e13d05/dev_root/p4/arp_icmp_responder.p4#L66-L80
and this is how you add an entry.
https://github.com/p4lang/p4app-switchML/blob/7ded628eb31a86e80ad0bf65e72a3e94e0e13d05/dev_root/controller/arp_icmp_responder.py#L61-L96
A ternary match requires both a value and a mask. Also, when there is a ternary match, you can have overlapping rules (a packet can match more than one rule), so there is an additional priority field to specify which rule should be applied first (0 is the highest priority).
There is also an example about ternary match in the open-tofino repo here.

Hi,
Thanks again for the comments and support on this.
I have indeed changed the forwarding table to a ternary match on the keys as shown below:
table forward {
        key = {
            hdr.ethernet.dst_addr : ternary;
            ig_intr_md.ingress_port : ternary;
        }
        actions = {
            set_egress_port;
            flood;
        }
        size = forwarding_table_size;
    }

for which I'm populating an entry for enabling the forwarding of all traffic from ingress_dev_port port to egress_dev_port like so:
self.table.entry_add(
            self.target,
            [
                self.table.make_key([
                    self.gc.KeyTuple('$MATCH_PRIORITY', 0),
                    self.gc.KeyTuple(
                        'hdr.ethernet.dst_addr',  # 48 bits
                        0x000000000000,  # dst_addr mac
                        0x000000000000),
                    self.gc.KeyTuple(
                        'ig_intr_md.ingress_port',  # port
                        ingress_dev_port,
                        0xff)
                ])
            ],
            [
               self.table.make_data([self.gc.DataTuple('egress_port', egress_dev_port)],
                                 'Ingress.forwarder.set_egress_port')
            ])

and then the normal destination mac forwarding rules are added like this:
self.table.entry_add(self.target, [
            self.table.make_key([
                self.gc.KeyTuple('$MATCH_PRIORITY', 1),
                self.gc.KeyTuple('hdr.ethernet.dst_addr', mac_address, 0xffffffffffff),
                self.gc.KeyTuple('ig_intr_md.ingress_port', 0x00, 0x00)
            ])
        ], [
            self.table.make_data([self.gc.DataTuple('egress_port', dev_port)],
                                 'Ingress.forwarder.set_egress_port')
        ])

I am trying to validate the configuration( emulating the bigger topology by loopbacking two ports with an external link and forwarding all traffic from one port via the external link) with the simplest example possible by pinging one machine from another via the port looping with the external link. I'm changing the ports.yaml config in order to configure the switch to use the end of the loopback link as the port of the target machine. However, although traffic does seem to be redirected via the configured loopback link, ping is not successfull. Specifically, I'm commenting out the flood rules configured by the control plane here:
        # Add ports to flood multicast group
        rids_and_ports = [
            (self.all_ports_initial_rid + dp, dp) for dp in fib.keys()
        ]
        success, error_msg = self.pre.add_multicast_nodes(
            self.all_ports_mgid, rids_and_ports)
        if not success:
            return (False, error_msg)

        for r, p in rids_and_ports:
            self.multicast_groups[self.all_ports_mgid][r] = p

in order to track things more clearly through the packet counters of BFRT and what I see is that on one direction of the ping the packet goes through the loopback link but then isn't forwarded to the target's port and on the other way, the packet does seem to be redirected through all hops correctly and exit through the target host's port but is not detected via a regular tcpdump. I have validated the above by running the same model and configuration on the Tofino Model emulator provided by Intel's P4 SDE and seems to work fine meaning ICMP echo request packet delivered on both directions.
Is there something obviously wrong with my approach ? Could there be some other part of SwitchML's functionality (e.g., the icmp_arp_responder) affecting this ? Any suggestion on how to debug this would be appreciated, thanks.

My first guess is that the first packet that goes out when you do a ping is an arp packet. That packet will have as destination mac address the broadcast address FF:FF:FF:FF:FF:FF that doesn't match any rule and is supposed to be flooded on all ports using the flood default rule and the multicast group you commented. Try adding the arp rule manually first so that an arp resolution is not needed.
The icmp_arp_responder control is used to answer arp and ping requests addressed directly to the switch, using the MAC/IP addresses  that you provide to the controller with the parameters --switch-mac and --switch-ip. I don't think this is affecting your test.
The reason why you don't see the packet with tcpdump could be that the packet format is wrong and dropped by the NIC, or maybe a checksum is incorrect. The best way to debug this is to use the snapshot feature in Tofino, that allows to see how a packet is processed by your P4 program (similar to the tofino model log, but more low level). With a snapshot you can see what  rule a packet matched, and what headers are valid when the packet is going out (to check that the format is correct).

Thanks again for the comments.
I've managed to identify the issue that was causing the unexpected packet processing behavior. In SwitchML's parser:
https://github.com/p4lang/p4app-switchML/blob/7ded628eb31a86e80ad0bf65e72a3e94e0e13d05/dev_root/p4/parsers.p4#L46-L59
all pipe 1,2,3 ports are considered to be recirculation which follows a specific parsing logic, extracting some SwitchML specific headers. I realized that the extra link I was using to emulate the bigger topology was connected to a pair of front panel ports corresponding to pipe 3, thus all traffic coming in from those ports was redirected to parse_recirculate state and thus was not parsing the packets correctly.  Once I brought all the links to ports connected to pipe 1, everything seems to work fine. My switch (bf2556x-1t) has only two pipes shown as 1 and 3 so I suspect pipe 1 corresponds to pipe 0.
Does this mean that we are meant to be using only pipe 1 ports for testing and the rest are used by the SwitchML logic inside the switch?
Thank you,

Hi,
yes, all that you said is correct.
In a 2-pipe switch like yours, there are 2 pipes that sometimes are called 1 and 3 (like in the P/PT column of pm show), and sometimes are called 0 and 1 (this is the dataplane number that we use in the P4 program).
In the P4 program a port number is a 9 bit number (the number in the D_P column of pm show) and the 2 most significant bits are the pipe dataplane number. So, the rule for the number to use in the P4 program (like in the parser code that you linked) is that ports [0,127] are in pipe 0, and ports [128,255] are in pipe 1.
Currently, our program is hardcoding that ports in the pipes 1,2,3 are considered in loopback. I mentioned it in the first answer, and until we make the changes I described, we can only use the ports in pipe 0 to connect to servers. Does this work for you?


stringify corrupts data

Example:
[
  mappings: [
   "db.user": [
      doc: """
      username:password
      """,
      to: "app",
      datatype: :binary,
      default: "root:"
    ]
  ],

  translations: [
    "app": fn
      _, user_pass, acc ->
        case String.split(user_pass, ":") do
          [user, pass] ->
            repo_conf = acc[App.Repo] || []
            put_in((acc || []), [App.Repo], [{:username, user}, {:password, pass} | repo_conf])
          _ ->
            IO.puts("Username and password should be separated with `:`, got: #{user_pass}")
            exit(1)
        end
    end]
]

Conform.Schema.read!("config") |> Conform.Schema.stringify |> IO.puts
transforms to:
[
  mappings: [
    "db.user": [
      doc: """
      username:password
      """,
      to: "app",
      datatype: :binary,
      default: "root:"
    ]
  ],
  translations: [
    app: fn _, user_pass, acc ->
      case String.split(user_pass, ":") do
        userpass ->
          repo_conf = acc[App.Repo] || []
          put_in(acc || [], [App.Repo], [{:username, user}, {:password, pass} | repo_conf])
        _ ->
          IO.puts("Username and password should be separated with `:`, got: #{user_pass}")
          exit(1)
      end
    end
  ]
]

Changes the line to: [user, pass] -> to userpass
CC: @umatomba

Is there a reason to use conform implementation instead of Macro.to_string for transforming quoted to string?


UI: Red error message in ResultDisplay

Individual task
Error style of text in ResultDisplay when command fails, and default style of text when command succeeds
Updated unit tests for ResultDisplay

This is a welcome addition that will notify users more clearly that they have typed the command wrong. Well done!
Only issue I can potentially see is if the messages are lengthy, and the red text may make it slightly hard to read.


changing start_date doesnt work on local env

doesn't matter which start_date i set, when opening the local airflow UI i see that the next run doesnt change and seem to be on this latest date that it can run by the dag interval.
For example, we are now on December and for all dags where schedule=@monthly the next run is on 2022-11-01
how can the date be set by the developer?
tnx

for the next generations, we solved it by changing in airflow.cfg the line
catchup_by_default = False to
catchup_by_default = True


fix: AMOLED theme not working with the default color (on non-English languages)

Hi everyone,
My previous PR (#4406) was fixing mainly all the issues, but I missed one case: we save the translated value as the color.
It was OK for Blue, Red… but not for the default one.
A single one-line fix as usual

Codecov Report

Merging #4439 (3980d9e) into develop (29e2ec4) will increase coverage by 0.00%.
Report is 1 commits behind head on develop.
The diff coverage is 0.00%.

@@           Coverage Diff            @@
##           develop    #4439   +/-   ##
========================================
  Coverage    10.17%   10.17%
========================================
  Files          295      295
  Lines        15090    15087    -3
========================================
  Hits          1535     1535
+ Misses       13555    13552    -3

Files Changed
Coverage Δ

...b/pages/preferences/user_preferences_settings.dart
8.66% <0.00%> (ø)

... and 1 file with indirect coverage changes
:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


[P2P Sync] - Add unit tests and clean up PR for sending and receiving data

[ ] Add unit tests for Sending and receiving data PR
[ ] https://github.com/opensrp/p2p/issues/27 (0.5 FTE days tentative)
[ ] https://github.com/opensrp/p2p/issues/31 (LOE 2 - 4 hours FTE)
[ ] Tests for WifiDirectDataSharingStrategy class (Requires research on how to test  3 - 4 FTE days tentative)
[ ] Tests for P2PDeviceSearchActivity class 1 - 2 days FTE
[ ] Tests for P2PReceiverViewModel class 0.5 days FTE

7 FTE days remaining


Ligpargen run error

Hi，I have installed ligpargen as the instructions list in the repo. Also, I fortunately got a copy of 'BOSS-5.0', and the enviroment variable is well set. And the unittest show no errors. But when I try ligpargen, I still get errors as follows:
(py37) [jxm@cent ligpargen]$ ligpargen -s 'c1ccc(cc1)O'
Traceback (most recent call last):
File "/home/jxm/.conda/envs/py37/bin/ligpargen", line 33, in
sys.exit(load_entry_point('LigPargen', 'console_scripts', 'ligpargen')())
File "/home/jxm/ligpargen/ligpargen/ligpargen.py", line 504, in main
molname=args.molname, workdir= args.path, debug= args.debug)
File "", line 17, in init
File "/home/jxm/ligpargen/ligpargen/ligpargen.py", line 190, in post_init
self.workdir, self.debug)
File "/home/jxm/ligpargen/ligpargen/tools/boss.py", line 208, in run
shutil.copyfile('plt.pdb', pdbFile)
File "/home/jxm/.conda/envs/py37/lib/python3.7/shutil.py", line 120, in copyfile
with open(src, 'rb') as fsrc:
FileNotFoundError: [Errno 2] No such file or directory: 'plt.pdb'
I check all the possible aspects, and find no way to solve the problem by myself. So I post the error here to ask for some help?
Deely apprecite it! I have been stuck for several months...

Hey Jia,
Have you checked if BOSS is working? Please note that BOSS is a 32-bit
binary and requires 32-bit libraries to be installed on your Linux
distribution. Try running ./BOSS in your terminal, and follow the
instructions to install the 32 bits libraries if you encounter any error
messages.
Tip: Google how to run 32 bits software in my Linux
Best,
Israel
On Thu, 15 Aug 2024 at 03:00, XiangMeng Jia @.***>
wrote:

Hi，I have installed ligpargen as the instructions list in the repo. Also,
I fortunately got a copy of 'BOSS-5.0', and the enviroment variable is well
set. And the unittest show no errors. But when I try ligpargen, I still get
errors as follows:
(py37) @.*** ligpargen]$ ligpargen -s 'c1ccc(cc1)O'
Traceback (most recent call last):
File "/home/jxm/.conda/envs/py37/bin/ligpargen", line 33, in
sys.exit(load_entry_point('LigPargen', 'console_scripts', 'ligpargen')())
File "/home/jxm/ligpargen/ligpargen/ligpargen.py", line 504, in main
molname=args.molname, workdir= args.path, debug= args.debug)
File "", line 17, in init
File "/home/jxm/ligpargen/ligpargen/ligpargen.py", line 190, in
post_init
self.workdir, self.debug)
File "/home/jxm/ligpargen/ligpargen/tools/boss.py", line 208, in run
shutil.copyfile('plt.pdb', pdbFile)
File "/home/jxm/.conda/envs/py37/lib/python3.7/shutil.py", line 120, in
copyfile
with open(src, 'rb') as fsrc:
FileNotFoundError: [Errno 2] No such file or directory: 'plt.pdb'
I check all the possible aspects, and find no way to solve the problem by
myself. So I post the error here to ask for some help?
Deely apprecite it! I have been stuck for several months...
—
Reply to this email directly, view it on GitHub
https://github.com/Isra3l/ligpargen/issues/25, or unsubscribe
https://github.com/notifications/unsubscribe-auth/AJNWMVBTL472OEPGO32LW4DZRP4SVAVCNFSM6AAAAABMRK4JQKVHI2DSMVQWIX3LMV43ASLTON2WKOZSGQ3DOMBXG4ZTMOA
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

Hey Jia, Have you checked if BOSS is working? Please note that BOSS is a 32-bit binary and requires 32-bit libraries to be installed on your Linux distribution. Try running ./BOSS in your terminal, and follow the instructions to install the 32 bits libraries if you encounter any error messages. Tip: Google how to run 32 bits software in my Linux Best, Israel
…
On Thu, 15 Aug 2024 at 03:00, XiangMeng Jia @.> wrote: Hi，I have installed ligpargen as the instructions list in the repo. Also, I fortunately got a copy of 'BOSS-5.0', and the enviroment variable is well set. And the unittest show no errors. But when I try ligpargen, I still get errors as follows: (py37) @. ligpargen]$ ligpargen -s 'c1ccc(cc1)O' Traceback (most recent call last): File "/home/jxm/.conda/envs/py37/bin/ligpargen", line 33, in sys.exit(load_entry_point('LigPargen', 'console_scripts', 'ligpargen')()) File "/home/jxm/ligpargen/ligpargen/ligpargen.py", line 504, in main molname=args.molname, workdir= args.path, debug= args.debug) File "", line 17, in init File "/home/jxm/ligpargen/ligpargen/ligpargen.py", line 190, in post_init self.workdir, self.debug) File "/home/jxm/ligpargen/ligpargen/tools/boss.py", line 208, in run shutil.copyfile('plt.pdb', pdbFile) File "/home/jxm/.conda/envs/py37/lib/python3.7/shutil.py", line 120, in copyfile with open(src, 'rb') as fsrc: FileNotFoundError: [Errno 2] No such file or directory: 'plt.pdb' I check all the possible aspects, and find no way to solve the problem by myself. So I post the error here to ask for some help? Deely apprecite it! I have been stuck for several months... — Reply to this email directly, view it on GitHub <#25>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AJNWMVBTL472OEPGO32LW4DZRP4SVAVCNFSM6AAAAABMRK4JQKVHI2DSMVQWIX3LMV43ASLTON2WKOZSGQ3DOMBXG4ZTMOA . You are receiving this because you are subscribed to this thread.Message ID: @.***>

Hi Israel,
I installed 32-libs, the then ligpargen work perfectly! Thank you soooo much!
And I post the installation commands here (maybe someone encounter the same problem!):
centos-7.9: install 32 libs
yum install libstdc++.so.5
yum install glic-i686

Hey Jia, Have you checked if BOSS is working? Please note that BOSS is a 32-bit binary and requires 32-bit libraries to be installed on your Linux distribution. Try running ./BOSS in your terminal, and follow the instructions to install the 32 bits libraries if you encounter any error messages. Tip: Google how to run 32 bits software in my Linux Best, Israel
…
On Thu, 15 Aug 2024 at 03:00, XiangMeng Jia @.> wrote: Hi，I have installed ligpargen as the instructions list in the repo. Also, I fortunately got a copy of 'BOSS-5.0', and the enviroment variable is well set. And the unittest show no errors. But when I try ligpargen, I still get errors as follows: (py37<EMAIL_ADDRESS>ligpargen]$ ligpargen -s 'c1ccc(cc1)O' Traceback (most recent call last): File "/home/jxm/.conda/envs/py37/bin/ligpargen", line 33, in sys.exit(load_entry_point('LigPargen', 'console_scripts', 'ligpargen')()) File "/home/jxm/ligpargen/ligpargen/ligpargen.py", line 504, in main molname=args.molname, workdir= args.path, debug= args.debug) File "", line 17, in init File "/home/jxm/ligpargen/ligpargen/ligpargen.py", line 190, in post_init self.workdir, self.debug) File "/home/jxm/ligpargen/ligpargen/tools/boss.py", line 208, in run shutil.copyfile('plt.pdb', pdbFile) File "/home/jxm/.conda/envs/py37/lib/python3.7/shutil.py", line 120, in copyfile with open(src, 'rb') as fsrc: FileNotFoundError: [Errno 2] No such file or directory: 'plt.pdb' I check all the possible aspects, and find no way to solve the problem by myself. So I post the error here to ask for some help? Deely apprecite it! I have been stuck for several months... — Reply to this email directly, view it on GitHub <#25>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AJNWMVBTL472OEPGO32LW4DZRP4SVAVCNFSM6AAAAABMRK4JQKVHI2DSMVQWIX3LMV43ASLTON2WKOZSGQ3DOMBXG4ZTMOA . You are receiving this because you are subscribed to this thread.Message ID<EMAIL_ADDRESS>
Hi Israel,
I installed 32-libs, the then ligpargen work perfectly! Thank you soooo much!
And I post the installation commands here (maybe someone encounter the same problem!):
centos-7.9: install 32 libs
yum install libstdc++.so.5
yum install glic-i686

Perhaps, not glic, but glibc?

Hey Jia, Have you checked if BOSS is working? Please note that BOSS is a 32-bit binary and requires 32-bit libraries to be installed on your Linux distribution. Try running ./BOSS in your terminal, and follow the instructions to install the 32 bits libraries if you encounter any error messages. Tip: Google how to run 32 bits software in my Linux Best, Israel
…
On Thu, 15 Aug 2024 at 03:00, XiangMeng Jia @.> wrote: Hi，I have installed ligpargen as the instructions list in the repo. Also, I fortunately got a copy of 'BOSS-5.0', and the enviroment variable is well set. And the unittest show no errors. But when I try ligpargen, I still get errors as follows: (py37<EMAIL_ADDRESS>ligpargen]$ ligpargen -s 'c1ccc(cc1)O' Traceback (most recent call last): File "/home/jxm/.conda/envs/py37/bin/ligpargen", line 33, in sys.exit(load_entry_point('LigPargen', 'console_scripts', 'ligpargen')()) File "/home/jxm/ligpargen/ligpargen/ligpargen.py", line 504, in main molname=args.molname, workdir= args.path, debug= args.debug) File "", line 17, in init File "/home/jxm/ligpargen/ligpargen/ligpargen.py", line 190, in post_init self.workdir, self.debug) File "/home/jxm/ligpargen/ligpargen/tools/boss.py", line 208, in run shutil.copyfile('plt.pdb', pdbFile) File "/home/jxm/.conda/envs/py37/lib/python3.7/shutil.py", line 120, in copyfile with open(src, 'rb') as fsrc: FileNotFoundError: [Errno 2] No such file or directory: 'plt.pdb' I check all the possible aspects, and find no way to solve the problem by myself. So I post the error here to ask for some help? Deely apprecite it! I have been stuck for several months... — Reply to this email directly, view it on GitHub <#25>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AJNWMVBTL472OEPGO32LW4DZRP4SVAVCNFSM6AAAAABMRK4JQKVHI2DSMVQWIX3LMV43ASLTON2WKOZSGQ3DOMBXG4ZTMOA . You are receiving this because you are subscribed to this thread.Message ID<EMAIL_ADDRESS>
Hi Israel,
I installed 32-libs, the then ligpargen work perfectly! Thank you soooo much!
And I post the installation commands here (maybe someone encounter the same problem!):
centos-7.9: install 32 libs
yum install libstdc++.so.5
yum install glic-i686

Perhaps, not glic, but glibc?

Yeah, a typo. glibc is correct.


Incorrectly named imports

I think we should check import names in all dart files.
They need to be relative paths as explained in #43.
For example:
// Before
import 'package:sossoldi/model/example.dart';

// After
import 'model/example.dart';

Now all paths are correctly switched to relative.
Thank you, I'm closing this.


Implement trip sequence duplicate verification (GTFS rule)

Is your feature request related to a problem? Please describe.
A stop should not be duplicated in a trip stop sequence. This is a GTFS rule implemented in Google Python validator and featured in Google Type Error as  TYPE_TRIP_DUPLICATES and TYPE_TRIP_WITH_DUPLICATE_STOPS.
Describe the solution you'd like
Actual Google GTFS validator behaviour : verifies if a trip does not have multiple route types or does not have a duplicated stop in its stop sequence.
https://github.com/google/transitfeed/blob/master/transitfeed/trip.py#L575
Describe alternatives you've considered
Additional context
Line 130 and 146 in Error support priorities https://docs.google.com/spreadsheets/d/1vqe6wq7ctqk1EhYkgtZ0_TbcQ91vccfs2daSjn20BLE/edit#gid=0

@maximearmstrong Could you explain the implementation details of this one a little more, or link to the Python code?
I'm curious to know to what extent trips are tested to be the "same".

I rephrased the explanation above and added a link. A stop should not be duplicated in a trip stop sequence.

Ah, ok, thanks - so stop_sequence should be unique within a trip - that makes sense.

@fabrice-v If this rule is checking for duplicate stop_sequence values within a trip, it's in spec.

I think this is covered now that we have introduced keys in the spec.
The primary key of stop_times.txt is (trip_id, stop_sequence). If we have a duplicate value for stop_sequence for one trip, the validator will emit the duplicate_key notice


#[16] Feature: Audio

Codecov Report
Attention: Patch coverage is 0% with 50 lines in your changes missing coverage. Please review.

Project coverage is 0.00%. Comparing base (2327722) to head (fb9be5d).
Report is 22 commits behind head on main.

Additional details and impacted files

Files
Coverage Δ

crates/framework/src/structs/media/options.rs
0.00% <ø> (ø)

crates/framework/src/features/audio.rs
0.00% <0.00%> (ø)

... and 1 file with indirect coverage changes


Add support for 'Elo' credit card brand

Summary
Add support for 'Elo' credit card brand.
Motivation
Support a credit card brand widely used in the Brazilian market.
Elo BINs: https://github.com/Adyen/magento/issues/236
Testing
Added relevant tests.

Closing PR because of failing Travis build.
Dear maintainers, @jenanwise @dotch & co: I'd like to ask 2 questions:

Do you know why the Travis build is failing? (even without adding new test cases) Could it be a version incompatibility problem?
Is "support for new credit card brand" considered a new feature?

If answer to # 1 is 'yes' and to # 2 'no', I'd be able to properly re-open the PR. Otherwise, I'd stick to using the fork ;)
Thanks in advance for both your time and the information... and of course for all the effort you've put into the library ;)

Hi @dcarral. Travis is passing on master. It looks like you have some typos in your PR.
This falls under "updating credit card BINs", so yes we'd happily take with a working patch!


JBD BMS: "Operation failed with ATT error: 0x0e (Connection Rejected Due To Security Reasons)"

Hey, since today the connection to my integrated jbd BMS does not work anymore:
21:51:39 INFO [sampling] connecting bms JbdBt(XX:XX:XX:XX:XX:XX)
21:51:40 ERROR [client] Pairing /org/bluez/hci0/dev_A4_C1_38_DE_A8_13 with hci0 failed (org.bluez.Error.AuthenticationFailed)
21:51:40 ERROR [bt] Pairing failed!
21:51:40 ERROR [sampling] camper_belluna_01 error: [org.bluez.Error.Failed] Operation failed with ATT error: 0x0e (Connection Rejected Due To Security Reasons)
21:51:40 ERROR [main] 1 exceptions occurred fetching BMSs
21:51:40 ERROR [main] Error (num 41, max 200) reading BMS: [org.bluez.Error.Failed] Operation failed with ATT error: 0x0e (Connection Rejected Due To Security Reasons)
21:51:40 ERROR [main] Stack: Traceback (most recent call last):
  File "/app/main.py", line 45, in fetch_loop
    await fn()
  File "/app/main.py", line 234, in fn
    raise exceptions[0]
  File "/app/main.py", line 229, in fn
    await t
  File "/app/bmslib/sampling.py", line 50, in __call__
    return await self.sample()
  File "/app/bmslib/sampling.py", line 68, in sample
    async with bms:
  File "/app/bmslib/bt.py", line 164, in __aenter__
    await self.connect()
  File "/app/bmslib/jbd.py", line 58, in connect
    await self.client.start_notify(self.UUID_RX, self._notification_handler)
  File "/usr/lib/python3.10/site-packages/bleak/backends/bluezdbus/client.py", line 1077, in start_notify
    assert_reply(reply)
  File "/usr/lib/python3.10/site-packages/bleak/backends/bluezdbus/utils.py", line 23, in assert_reply
    raise BleakDBusError(reply.error_name, reply.body)
bleak.exc.BleakDBusError: [org.bluez.Error.Failed] Operation failed with ATT error: 0x0e (Connection Rejected Due To Security Reasons)
21:51:40 WARNING [bt] BMS JbdBt(XX:XX:XX:XX:XX:XX) disconnected!
21:51:41 INFO [sampling] connecting bms JbdBt(XX:XX:XX:XX:XX:XX)
21:51:41 ERROR [client] Pairing /org/bluez/hci0/dev_A4_C1_38_DE_A8_13 with hci0 failed (org.bluez.Error.AuthenticationFailed)
21:51:41 ERROR [bt] Pairing failed!
21:51:41 INFO [sampling] connected bms JbdBt(XX:XX:XX:XX:XX:XX)!
21:51:41 ERROR [sampling] camper_belluna_01 error: Not connected
21:51:41 ERROR [main] 1 exceptions occurred fetching BMSs
21:51:41 ERROR [main] Error (num 42, max 200) reading BMS: Not connected
21:51:41 ERROR [main] Stack: Traceback (most recent call last):
  File "/app/main.py", line 45, in fetch_loop
    await fn()
  File "/app/main.py", line 234, in fn
    raise exceptions[0]
  File "/app/main.py", line 229, in fn
    await t
  File "/app/bmslib/sampling.py", line 50, in __call__
    return await self.sample()
  File "/app/bmslib/sampling.py", line 72, in sample
    sample = await bms.fetch()
  File "/app/bmslib/jbd.py", line 73, in fetch
    buf = await self._q(cmd=0x03)
  File "/app/bmslib/jbd.py", line 66, in _q
    await self.client.write_gatt_char(self.UUID_TX, data=_jbd_command(cmd))
  File "/usr/lib/python3.10/site-packages/bleak/backends/bluezdbus/client.py", line 896, in write_gatt_char
    raise BleakError("Not connected")
bleak.exc.BleakError: Not connected
21:51:41 WARNING [bt] BMS JbdBt(XX:XX:XX:XX:XX:XX) disconnected!
21:51:42 INFO [sampling] connecting bms JbdBt(XX:XX:XX:XX:XX:XX)

Is this related to the latest update or is it only my setup?

Nevermind. My BMS just decided to remove the pin on itself.


chore: 🤖 update typescript-eslint monorepo to v5.59.5

This PR contains the following updates:

Package
Type
Update
Change
Pending

@typescript-eslint/eslint-plugin
devDependencies
patch
5.59.2 -> 5.59.5
5.59.6

@typescript-eslint/parser
devDependencies
patch
5.59.2 -> 5.59.5
5.59.6

@typescript-eslint/parser
peerDependencies
patch
5.59.2 -> 5.59.5
5.59.6

Release Notes

typescript-eslint/typescript-eslint (@typescript-eslint/eslint-plugin)
v5.59.5
Compare Source
Note: Version bump only for package @typescript-eslint/eslint-plugin

typescript-eslint/typescript-eslint (@typescript-eslint/parser)
v5.59.5
Compare Source
Note: Version bump only for package @typescript-eslint/parser

Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.

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

This PR has been generated by Renovate Bot.

⚠ Artifact update problem
Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

any of the package files in this branch needs updating, or
the branch becomes conflicted, or
you click the rebase/retry checkbox if found above, or
you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:
File name: pnpm-lock.yaml
installing v2 tool node v18.16.0
linking tool node v18.16.0
node: v18.16.0 /usr/local/bin/node
npm: 9.5.1  /usr/local/bin/npm
Installed v2 /usr/local/buildpack/tools/v2/node.sh in 4 seconds
installing v2 tool pnpm v8.5.0
linking tool pnpm v8.5.0
8.5.0
Installed v2 /usr/local/buildpack/tools/v2/pnpm.sh in 2 seconds
Scope: all 6 workspace projects

   ╭─────────────────────────────────────────────────────────────────╮
   │                                                                 │
   │                Update available! 8.5.0 → 8.5.1.                 │
   │   Changelog: https://github.com/pnpm/pnpm/releases/tag/v8.5.1   │
   │                Run "pnpm add -g pnpm" to update.                │
   │                                                                 │
   │     Follow @pnpmjs for updates: https://twitter.com/pnpmjs      │
   │                                                                 │
   ╰─────────────────────────────────────────────────────────────────╯

Progress: resolved 1, reused 0, downloaded 0, added 0
Progress: resolved 16, reused 0, downloaded 11, added 0
Progress: resolved 27, reused 0, downloaded 22, added 0
Progress: resolved 40, reused 0, downloaded 33, added 0
Progress: resolved 48, reused 0, downloaded 41, added 0
Progress: resolved 52, reused 0, downloaded 47, added 0
apps/cli-backend                         |  WARN  deprecated<EMAIL_ADDRESS>Progress: resolved 62, reused 0, downloaded 58, added 0
Progress: resolved 72, reused 0, downloaded 63, added 0
Progress: resolved 81, reused 0, downloaded 75, added 0
Progress: resolved 83, reused 0, downloaded 78, added 0
Progress: resolved 88, reused 0, downloaded 81, added 0
Progress: resolved 94, reused 0, downloaded 89, added 0
Progress: resolved 97, reused 0, downloaded 90, added 0
Progress: resolved 99, reused 0, downloaded 92, added 0
Progress: resolved 103, reused 0, downloaded 97, added 0
Progress: resolved 108, reused 0, downloaded 101, added 0
Progress: resolved 113, reused 0, downloaded 107, added 0
Progress: resolved 117, reused 0, downloaded 112, added 0
Progress: resolved 118, reused 0, downloaded 112, added 0
Progress: resolved 121, reused 0, downloaded 115, added 0
Progress: resolved 122, reused 0, downloaded 116, added 0
Progress: resolved 124, reused 0, downloaded 119, added 0
Progress: resolved 124, reused 0, downloaded 120, added 0
Progress: resolved 124, reused 0, downloaded 121, added 0
Progress: resolved 127, reused 0, downloaded 124, added 0
Progress: resolved 127, reused 0, downloaded 126, added 0
Progress: resolved 128, reused 0, downloaded 127, added 0
Progress: resolved 129, reused 0, downloaded 128, added 0
Progress: resolved 130, reused 0, downloaded 128, added 0
Progress: resolved 130, reused 0, downloaded 129, added 0
Progress: resolved 131, reused 0, downloaded 129, added 0
Progress: resolved 162, reused 0, downloaded 149, added 0
Progress: resolved 195, reused 0, downloaded 176, added 0
Progress: resolved 209, reused 0, downloaded 192, added 0
Progress: resolved 225, reused 0, downloaded 208, added 0
Progress: resolved 256, reused 0, downloaded 242, added 0
Progress: resolved 290, reused 0, downloaded 275, added 0
Progress: resolved 308, reused 0, downloaded 297, added 0
Progress: resolved 317, reused 0, downloaded 302, added 0
Progress: resolved 331, reused 0, downloaded 320, added 0
Progress: resolved 342, reused 0, downloaded 331, added 0
Progress: resolved 357, reused 0, downloaded 345, added 0
Progress: resolved 359, reused 0, downloaded 350, added 0
Progress: resolved 372, reused 0, downloaded 359, added 0
Progress: resolved 380, reused 0, downloaded 373, added 0
Progress: resolved 411, reused 0, downloaded 401, added 0
Progress: resolved 428, reused 0, downloaded 416, added 0
Progress: resolved 447, reused 0, downloaded 437, added 0
Progress: resolved 466, reused 0, downloaded 454, added 0
Progress: resolved 485, reused 0, downloaded 470, added 0
Progress: resolved 502, reused 0, downloaded 489, added 0
Progress: resolved 507, reused 0, downloaded 493, added 0
Progress: resolved 515, reused 0, downloaded 503, added 0
Progress: resolved 534, reused 0, downloaded 519, added 0
Progress: resolved 547, reused 0, downloaded 535, added 0
Progress: resolved 572, reused 0, downloaded 559, added 0
Progress: resolved 603, reused 0, downloaded 592, added 0
Progress: resolved 649, reused 0, downloaded 636, added 0
Progress: resolved 711, reused 0, downloaded 695, added 0
Progress: resolved 737, reused 0, downloaded 714, added 0
Progress: resolved 786, reused 0, downloaded 737, added 0
Progress: resolved 813, reused 0, downloaded 763, added 0
Progress: resolved 844, reused 0, downloaded 791, added 0
Progress: resolved 868, reused 0, downloaded 822, added 0
Progress: resolved 887, reused 0, downloaded 839, added 0
Progress: resolved 937, reused 0, downloaded 885, added 0
Progress: resolved 1011, reused 0, downloaded 963, added 0
Progress: resolved 1067, reused 0, downloaded 1013, added 0
Progress: resolved 1083, reused 0, downloaded 1031, added 0
Progress: resolved 1112, reused 0, downloaded 1064, added 0
Progress: resolved 1153, reused 0, downloaded 1106, added 0
Progress: resolved 1171, reused 0, downloaded 1123, added 0
apps/cli-backend                         |  WARN  deprecated<EMAIL_ADDRESS>Progress: resolved 1183, reused 0, downloaded 1140, added 0
Progress: resolved 1204, reused 0, downloaded 1154, added 0
Progress: resolved 1233, reused 0, downloaded 1181, added 0
Progress: resolved 1251, reused 0, downloaded 1201, added 0
Progress: resolved 1262, reused 0, downloaded 1215, added 0
Progress: resolved 1265, reused 0, downloaded 1217, added 0
Progress: resolved 1270, reused 0, downloaded 1223, added 0
Progress: resolved 1285, reused 0, downloaded 1237, added 0
Progress: resolved 1334, reused 0, downloaded 1288, added 0
Progress: resolved 1349, reused 0, downloaded 1308, added 0
Progress: resolved 1360, reused 0, downloaded 1322, added 0
Progress: resolved 1373, reused 0, downloaded 1335, added 0
Progress: resolved 1416, reused 0, downloaded 1374, added 0
apps/cli-backend                         |  WARN  deprecated<EMAIL_ADDRESS>Progress: resolved 1491, reused 0, downloaded 1439, added 0
Progress: resolved 1526, reused 0, downloaded 1477, added 0
Progress: resolved 1550, reused 0, downloaded 1507, added 0
Progress: resolved 1554, reused 0, downloaded 1516, added 0
Progress: resolved 1557, reused 0, downloaded 1520, added 0
Progress: resolved 1557, reused 0, downloaded 1521, added 0
Progress: resolved 1558, reused 0, downloaded 1521, added 0
Progress: resolved 1558, reused 0, downloaded 1522, added 0
Progress: resolved 1559, reused 0, downloaded 1522, added 0
Progress: resolved 1564, reused 0, downloaded 1528, added 0
Progress: resolved 1565, reused 0, downloaded 1528, added 0
Progress: resolved 1565, reused 0, downloaded 1529, added 0
Progress: resolved 1566, reused 0, downloaded 1529, added 0
Progress: resolved 1567, reused 0, downloaded 1531, added 0
 WARN  GET https://registry.npmjs.org/inquirer-maxlength-input-prompt/-/inquirer-maxlength-input-prompt-1.0.2.tgz error (ERR_SOCKET_TIMEOUT). Will retry in 10 seconds. 2 retries left.
Progress: resolved 1568, reused 0, downloaded 1531, added 0


DNM: sign-root-targets for bobcallaway

@asraa

Summary

Release Note

Documentation

Thank you! Verified with
STAGED METADATA

Outputting metadata verification at /home/asraa/git/root-signing/repository...

Verifying root.json...
	Contains 1/3 valid signatures from the current staged metadata
	Contains 1/3 valid signatures from the previous root
	root version 6, expires 2023/08/15

Verifying targets.json...
	Contains 1/3 valid signatures from the current staged metadata
	targets version 6, expires 2023/08/15


git and magit complain about SSL certs

Issue description
After an upgrade to unstable git and magit (emacs git plugin) stopped working with the messsage:
fatal: unable to access 'https://github.com/magnetophon/nixpkgs.git/': SSL certificate problem: unable to get local issuer certificate

I could work around it by installing cacerts and pointing git to it.
As requested by @layus in #8247, I'm making this a new issue.
Technical details

System: 16.09.git.7dbe981
Nix version: nix-env (Nix) 1.11.2
Nixpkgs version: 16.09pre85931.125ffff

I haven't seen this in a while, closing.


Library Compilation Error (0.7.0): conflicting implementations of trait error::Error<_> for type error::Simple<_, _>

I am not sure why, but Rust cannot compile the library version 0.7.0. The error can be seen below. Could someone else please also confirm this?

error[E0119]: conflicting implementations of trait `error::Error<_>` for type `error::Simple<_, _>`
   --> /home/colin/.cargo/registry/src/github.com-1ecc6299db9ec823/chumsky-0.7.0/src/error.rs:352:1
    |
223 | impl<I: Hash + Eq, S: Span + Clone + fmt::Debug> Error<I> for Simple<I, S> {
    | -------------------------------------------------------------------------- first implementation here
...
352 | impl<I, S: Span + Clone + fmt::Debug> Error<I> for Simple<I, S> {
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `error::Simple<_, _>`

For more information about this error, try `rustc --explain E0119`.
error: could not compile `chumsky` due to previous error

In the current versions, the error corresponds to here and here in the current source code.
Notice that in the latter Simple was changed to Cheap at some point, though I couldn't find out when.

A workaround I am currently using is to clone the repository locally and specify
[patch.crates-io]
chumsky = { path = "./chumsky" }

This compiles, so the next stable release will definitely fix this issue.

Hmm, interesting. Perhaps this is a typo? Regardless, as you say, it shouldn't be present in the next release that should be coming in the next day or two.

Just an FYI, I've released version 0.8 now so this should no longer be can issue. If the issue persists, I can re-open this.


How to render new added page without removing previous rendered ones

I have over 3000 post, i'm rendering all of them - it took like a 20 mins. After this i'm adding new post to my db and i need to render this one page to join it to just rendered files/posts. How to do this without removing already created data? I wish to use some process env like: GENERATE_POST so my generate block will looks like this:
generate: {
  routes: function () {
    if (process.env.GENERATE_POST) {
      // generating only one post
      return ['/feed/' + process.env.GENERATE_POST]
    } else {
      // generating all data in promise loop
    }
  }
},

Thx for help.

Actually, this is difficult to imagine because we need to build again the application due to bundles generated by webpack for the Vue.js app.
But, I will try to find a way, any contribution is welcome!

@alexchopin where is code that corresponds with that?

/lib/builder/generator.js

Another idea is creating a simple bash script. Warn that you may potentially give client side js errors as manifest for each build is unique :) Also script is just to get idea will certainly not working with just copy-paste :D
// Usage ./generate_post.sh [post_id]

export GENERATE_POST=$1
export TARGET="feed/$GENERATE_POST/index.html"

cp -r dist public

npm run generate // Will generate only new page to dist

cp dist/$TARGET public/$TARGET

// Now public contains updated version :)

Opps also forgot to mention with next releases it is easier programmatically control generate behaviour to prevent build process for patchs resulting fully working js too :)

@pi0 and when will be new release? you've said before that it will be sunday :) just asking

@pi0 actually your solution works quite nice, but there was an error with copy cmd:
export GENERATE_POST=$1
export TARGET_DIR="feed/$GENERATE_POST"
export TARGET="feed/$GENERATE_POST/index.html"

npm run generate_post

mkdir public/$TARGET_DIR
cp dist/$TARGET public/$TARGET
rm -rf dist

Should be fixed with the new release


Fix nightly Nov 11 2024

Nightly fails in all platform tests
https://github.com/gardenlinux/gardenlinux/actions/runs/11773036637
Errors look different on the platforms, need to investigate.

Errors come from audit-rules.service
The first build failed on Saturday. Also, debian upgraded auditd from v3 to v4 on Saturday in testing (see tracker). I can reproduce the issue with a local vm, building one with today and booting it gives a failed audit systemd unit, doing the same with 1592.2 does not fail that unit.

PR by @5kt #2463

nightly is green again. done.


how to run on Windows

I see an executable folder in the source code release package after unzipping it.
this contains a '3scale' file. Tried to rename to '3scale.exe' but WIN10 complains the executable is not compatible, when trying to run it.

no need to rename to 3scale.exe. 3scale file in bin directory is a script file run by ruby.exe bundled with the installation.
I just tested latest release (v0.16.0) and it is working with Windows 10. Just open terminal and type:
3scale -v
It should run correctly.


Make incremental improvements to the ST test framework.

Looks like good cleanup to me.  I'd be tempted to make the execute/calicoctl commands more similatr to Popen or sh.  I.e. host.calicoctl("node", ip="<IP_ADDRESS>"), using *args or passing a list as the first argument.
This is test code so it's not a big deal but in production code, it's a big red flag to be passing strings down into the shell without escaping them and the cleanest way I know to do that is to pass lists of arguments down and have the escaping done at a low layer.

Yeah, I'd really like something like that, but can't see how to do it without overengineering at this point. I'll try to keep it in mind as I change bits.


Define 'Open Governance' requirements for Top Level Projects

In summary from the Project Progression meeting this morning, the attendees are in general agreement that Open Governance should be a core value of top level projects.
The suggestion is to start with the JSF's Mentorship Program as a jumping off point (copied below, linked here

Mentorship
The purpose of mentorship is to support and mentor projects entering the
Foundation. The goal is for projects to be:

Participatory
Transparent
Effective

While certain processes are strongly recommended based on the experiences of the
Foundation and its Projects, the goal of mentorship is not to enforce a specific
set of processes but to ensure that the processes adopted and accepted by a
project achieve these goals. Therefore, the requirements for graduating from
mentorship are based on metrics that demonstrate success in terms of these
values. These metrics are:

Project's defined governing body is 5 members or greater
No more than 1/3 of the defined governing body is affiliated with the same
employer.
No more than 1/3 of any Project is affiliated with the same employer.
The decision making and release process is documented and publicly accessible.
Other metrics as defined by the applying Project during the application
process in cooperation with their mentor

A Project may apply to graduate from mentorship at any time by calling for a
vote in the TAC.
While a Project is under mentorship, it is assigned at least 1 [mentor][] who
is responsible for working with the Project to adopt policies and gain the
health and contributorship it will need in order to graduate from mentorship.
The mentor list is nominated and approved by the TAC and may be larger than the
TAC.

As #88 has landed I think this can be closed.  Feel free to re-open or let me know that I should if this was closed prematurely


[DNM] ares-1 (v13)

v13 multi upgrade testnet. Do not merge, will do work out of this branch. Will merge after successful.

Closing already handled. Will reuse things from here in the future for a mesh security testnet and others


Use psycopg2's API for serializing postgres cell values

I bumped into an issue when trying to insert arrays into a PostgreSQL table (represented as Python lists) since the current serialization format didn't support it. This PR makes passes the responsibility of serialization to psycopg2 for psql queries.

Rebased onto be2a181c4fdac9832fb381e8e67592127adc5e4e.

Changes Unknown when pulling 72e7883666b4bde08db6451af730546b8663ff34 on underyx:feature/use-psycopg2-adapt into ** on airbnb:master**.

Changes Unknown when pulling 72e7883666b4bde08db6451af730546b8663ff34 on underyx:feature/use-psycopg2-adapt into ** on airbnb:master**.

Rebases onto c160bd1bab0edeaedde81fbd3030e1aee3e2faac to resolve conflicts.

Coverage increased (+0.008%) to 67.229% when pulling b74bfcb8446640cb6358d0575561896d55716f71 on underyx:feature/use-psycopg2-adapt into c160bd1bab0edeaedde81fbd3030e1aee3e2faac on airbnb:master.

Please squash your commits and I'll merge.

Are you sure about that? I intentionally pushed them split into two because
I think that the API change and the postgres serialization feature are two
separate logical changes. Just say yes though and I'll squash them.
On Tue, Mar 29, 2016, 10:53 PM bolkedebruin<EMAIL_ADDRESS>wrote:

Please squash your commits and I'll merge.
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub
https://github.com/airbnb/airflow/pull/1243#issuecomment-203097585

Amended the second commit with this change:
diff --git a/airflow/hooks/postgres_hook.py b/airflow/hooks/postgres_hook.py
index 446583e..0456416 100644
--- a/airflow/hooks/postgres_hook.py
+++ b/airflow/hooks/postgres_hook.py
@@ -33,4 +33,4 @@ class PostgresHook(DbApiHook):

     @staticmethod
     def _serialize_cell(cell):
-        return psycopg2.extensions.adapt(cell).getquoted().decode()
+        return psycopg2.extensions.adapt(cell).getquoted().decode('utf-8')

Python 2 was using 'ascii' by default which could lead to issues.

Coverage increased (+0.06%) to 67.192% when pulling d9b57efd3af1af85b6c89aa4e43333d08855b7e1 on underyx:feature/use-psycopg2-adapt into f347ee709f41f650c251da1442b3d00541b0a784 on airbnb:master.


Default zoom level is small and increments are huge

I am using Ferdi with Riot.
Compared to using it in a browser or in the default desktop app, the default zoom is quite smaller and barely readable.
Doing a Zoom in makes it huge on the contrary. The zoom step seems huge, the text is ~2 times bigger with only one increment.
This is on Fedora 32, with the Flatpak bundle, version 5.5.0.
Thanks.

I just tried with the AppImage instead, same behavior.

Weird, it should be a similar behaviour to how it is in Chrome and I havn't experiences this thus far. Do you have any special monitor configuration, e.g. a display with very high PPI or some custom setting?

Hum actually sorry you are right, I re-tested with a browser and it's the same size, just not the same as Riot Desktop, they are probably doing something there. However the increment correspond to something like 133% in the browser, and it goes from really small to huge. Any chance we get smaller increment ?

Zooming is implemented in https://github.com/getferdi/ferdi/blob/6999476b9eb71880e16b413f27a7df5bf458cd47/src/lib/Menu.js#L427-L453. We are currently using Electron's build-in zoom levels but we could switch to using custom zoom factors instead instead to change the step size (see https://www.electronjs.org/docs/api/web-frame#webframesetzoomfactorfactor).

Do y'all know if there is a way to increase the text size only? and not the Page zoom size? In Facebook messenger, the button elements are HUGE but the text for me is too small. Zooming in just makes the screen too crowded. I just want bigger text.

@prediscover There is no setting exposed from the electron API to change the text size unfortunately.
Apart from that, I can take a look at modifying the default zoom factor, so we have smaller increments: https://www.electronjs.org/docs/latest/api/web-frame/#webframesetzoomfactorfactor

Going to +1 this issue as separate message (apart with +1 to OP) because on my M1 MBP with screen's default resolution it's too huge and just zooming out for one level makes text painfully small to read. Using scaled resolution isn't an option due to Apple's Notes list view bug which eats constantly 60-65% of CPU (until I use default resolution or switch to gallery mode which is awful).


Cyrillic key support

What framework do you want to have? Please provide links of its i18n solution/package.
Refers to the vscode addon
Please provide a minimal starter project
It would be nice to have key support in Cyrillic (Russian)

Sorry I didn't get your point. Can you share more details?

For example if key in Russian, vscode interface do no show preview of it (key value), in English or other language is ok (as we can see on add-on screenshots in readme.md)
this work's fine (preview of key value visible ok)
lang file — "dublicate": "Дублировать"
js file — title={ i18n.t('dublicate') }
but this — not (preview not visible)
lang file — "Дублировать": "Дублировать"
js file — title={ i18n.t('Дублировать') }
some kind of character restriction (not supported?)

I guess you can try
"i18n-allly.keyMatchRegex": ".*?"

nope.. don't work :(
p.s. I'm using v2, so config will be i18n-ally.regex.key, also don't work

hm.. i't work!) thx a lot!

ops... it works, but not fully functionally
for example — key preview is fine, but full description on hover don't work (show's loading and nothing else)
this is with key on Russian language

this is — on English

I don't know how to type Russian but I tried Chinese letters and it works for me

Could you provide more information? (minimal reproduce repo would be the best)

just try this combination
lang file (key: value) — "Название ключа": "Дублировать"
js file — .t('Название ключа')

@titovskiy Sorry for a bit late, it seems to work for me as well.

Maybe you can try:
"i18n-ally.regex.key": ".*?"

yes... it woks, finally
thx a lot for support


Matching 2.x branch pull request

Adding 'blur' handler to hide the volumeSlider.

Thanks for the PR


pixman: 0.36.0 -> 0.38.0

Motivation for this change
Until find better changelog phoronix has some words about the update:
https://www.phoronix.com/scan.php?page=news_item&px=Pixman-0.38-Released
Things done

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

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

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

@GrahamcOfBorg build pixman

I've been using this, but just want to be sure it builds on current staging :).


Sync changes from main to 4-0-dev

Similar to:

https://github.com/rspec/rspec-expectations/pull/1387
https://github.com/rspec/rspec-core/pull/2975
https://github.com/rspec/rspec-support/pull/549

Thanks @pirj


Added DecimalAmount to common types.

Proposal: https://github.com/aip-dev/google.aip.dev/issues/653
(!) Please recommend if any build/test instructions should be run manually before the merge.

The protos in this repo are a subset of protos in other repositories, e.g. https://github.com/googleapis/googleapis, no original work should happen here.

The protos in this repo are a subset of protos in other repositories, e.g. https://github.com/googleapis/googleapis, no original work should happen here.


alert manager unmarshal errors

What did you do?
upgraded the alert manager and prometheus version to 0.22.0 and 2.27.0 respectively
What did you expect to see?
I wanted to see the pods running
What did you see instead? Under which circumstances?
but somehow it goes on CrashLoofBackOff
Environment
aws kops

System information:
Linux 3.10.0-1160.25.1.el7.x86_64 x86_64

Alertmanager version:
0.22.0

Prometheus version:
  2.27.0

Alertmanager configuration file:

apiVersion: v1
data:
  monitoring-prometheus-k8s-rules.yaml: |
    groups:
    - name: alertmanager.rules
      rules:
      - alert: AlertmanagerConfigInconsistent - NXAWS-DEV-USW2
        annotations:
          description: The configuration of the instances of the Alertmanager cluster
            `{{$labels.service}}` are out of sync.
          summary: Alertmanager configurations are inconsistent
        expr: count_values("config_hash", alertmanager_config_hash) BY (service) / ON(service)
          GROUP_LEFT() label_replace(prometheus_operator_alertmanager_spec_replicas, "service",
          "alertmanager-$1", "alertmanager", "(.*)") != 1
        for: 5m
        labels:
          severity: critical
      - alert: AlertmanagerDownOrMissing - NXAWS-DEV-USW2
        annotations:
          description: An unexpected number of Alertmanagers are scraped or Alertmanagers
            disappeared from discovery.
          runbook: https://confluence.eng.da.com:8443/display/XRE/alertmanager+service
          summary: Alertmanager down or not discovered
        expr: label_replace(prometheus_operator_alertmanager_spec_replicas, "job", "alertmanager-$1",
          "alertmanager", "(.*)") / ON(job) GROUP_RIGHT() sum(up) BY (job) != 1
        for: 5m
        labels:
          severity: warning
      - alert: FailedReload - NXAWS-DEV-USW2
        annotations:
          description: Reloading Alertmanager's configuration has failed for {{ $labels.namespace
            }}/{{ $labels.pod}}.
          summary: Alertmanager configuration reload has failed
        expr: alertmanager_config_last_reload_successful == 0
        for: 10m
        labels:
          severity: warning
      - alert: KubeClientCertificateExpiration - NXAWS-DEV-USW2
        annotations:
          description: ClientCertificate is going to expired
          runbook: https://confluence.eng.da.com:8443/display/XRE/KubeClientCertificateExpiration
          summary: ClientCertificate is going to expired
        expr: histogram_quantile(0.01, sum by (job, le) (rate(apiserver_client_certificate_expiration_seconds_bucket{job="apiserver"}[5m])))
          < 604800
        for: 10m
        labels:
          severity: critical
    - name: edge.rules
      rules:
      - alert: TrialTenantFailedCount - NXAWSSLUSUSW2
        annotations:
          description: Trial tenants failed count was grater than 0 for 5 minutes {{ $labels.namespace
            }}/{{ $labels.registration}}.
          summary: Trial tenants failed count is high
        expr: trial_tenants_failed_count{job="tenantpoolscanner-svc"} > 0
        for: 5m
        labels:
          severity: critical
    - name: etcd.rules
      rules:
      - alert: InsufficientMembers - NXAWS-DEV-USW2
        annotations:
          description: If one more etcd member goes down the cluster will be unavailable
          runbook: https://confluence.eng.da.com:8443/display/XRE/K8sEtcdNoLeader
          summary: etcd cluster insufficient members
        expr: count(up{job="etcd"} == 0) > (count(up{job="etcd"}) / 2 - 1)
        for: 3m
        labels:
          severity: critical
      - alert: NoLeader - NXAWS-DEV-USW2
        annotations:
          description: etcd member {{ $labels.instance }} has no leader
          runbook: https://confluence.eng.da.com:8443/display/XRE/K8sEtcdNoLeader
          summary: etcd member has no leader
        expr: etcd_server_has_leader{job="etcd"} == 0
        for: 1m
        labels:
          severity: critical
      - alert: HighNumberOfLeaderChanges - NXAWS-DEV-USW2
        annotations:
          description: etcd instance {{ $labels.instance }} has seen {{ $value }} leader
            changes within the last hour
          summary: a high number of leader changes within the etcd cluster are happening
        expr: increase(etcd_server_leader_changes_seen_total{job="etcd"}[1h]) > 3
        labels:
          severity: warning
      - alert: HighNumberOfFailedGRPCRequests - NXAWS-DEV-USW2
        annotations:
          description: '{{ $value }}% of requests for {{ $labels.grpc_method }} failed
            on etcd instance {{ $labels.instance }}'
          summary: a high number of gRPC requests are failing
        expr: sum(rate(etcd_grpc_requests_failed_total{job="etcd"}[5m])) BY (grpc_method)
          / sum(rate(etcd_grpc_total{job="etcd"}[5m])) BY (grpc_method) > 0.01
        for: 10m
        labels:
          severity: warning
      - alert: HighNumberOfFailedGRPCRequests - NXAWS-DEV-USW2
        annotations:
          description: '{{ $value }}% of requests for {{ $labels.grpc_method }} failed
            on etcd instance {{ $labels.instance }}'
          summary: a high number of gRPC requests are failing
        expr: sum(rate(etcd_grpc_requests_failed_total{job="etcd"}[5m])) BY (grpc_method)
          / sum(rate(etcd_grpc_total{job="etcd"}[5m])) BY (grpc_method) > 0.05
        for: 5m
        labels:
          severity: critical
      - alert: GRPCRequestsSlow - NXAWS-DEV-USW2
        annotations:
          description: on etcd instance {{ $labels.instance }} gRPC requests to {{ $labels.grpc_method
            }} are slow
          summary: slow gRPC requests
        expr: histogram_quantile(0.99, rate(etcd_grpc_unary_requests_duration_seconds_bucket[5m]))
          > 0.15
        for: 10m
        labels:
          severity: critical
      - alert: HighNumberOfFailedHTTPRequests - NXAWS-DEV-USW2
        annotations:
          description: '{{ $value }}% of requests for {{ $labels.method }} failed on etcd
            instance {{ $labels.instance }}'
          summary: a high number of HTTP requests are failing
        expr: sum(rate(etcd_http_failed_total{job="etcd"}[5m])) BY (method) / sum(rate(etcd_http_received_total{job="etcd"}[5m]))
          BY (method) > 0.01
        for: 10m
        labels:
          severity: warning
      - alert: HighNumberOfFailedHTTPRequests - NXAWS-DEV-USW2
        annotations:
          description: '{{ $value }}% of requests for {{ $labels.method }} failed on etcd
            instance {{ $labels.instance }}'
          summary: a high number of HTTP requests are failing
        expr: sum(rate(etcd_http_failed_total{job="etcd"}[5m])) BY (method) / sum(rate(etcd_http_received_total{job="etcd"}[5m]))
          BY (method) > 0.05
        for: 5m
        labels:
          severity: critical
      - alert: HTTPRequestsSlow - NXAWS-DEV-USW2
        annotations:
          description: on etcd instance {{ $labels.instance }} HTTP requests to {{ $labels.method
            }} are slow
          summary: slow HTTP requests
        expr: histogram_quantile(0.99, rate(etcd_http_successful_duration_seconds_bucket[5m]))
          > 0.15
        for: 10m
        labels:
          severity: warning
      - alert: EtcdMemberCommunicationSlow - NXAWS-DEV-USW2
        annotations:
          description: etcd instance {{ $labels.instance }} member communication with
            {{ $labels.To }} is slow
          summary: etcd member communication is slow
        expr: histogram_quantile(0.99, rate(etcd_network_member_round_trip_time_seconds_bucket[5m]))
          > 0.15
        for: 10m
        labels:
          severity: warning
      - alert: HighNumberOfFailedProposals - NXAWS-DEV-USW2
        annotations:
          description: etcd instance {{ $labels.instance }} has seen {{ $value }} proposal
            failures within the last hour
          summary: a high number of proposals within the etcd cluster are failing
        expr: increase(etcd_server_proposals_failed_total{job="etcd"}[1h]) > 5
        labels:
          severity: warning
      - alert: HighFsyncDurations - NXAWS-DEV-USW2
        annotations:
          description: etcd instance {{ $labels.instance }} fync durations are high
          summary: high fsync durations
        expr: histogram_quantile(0.99, rate(etcd_disk_wal_fsync_duration_seconds_bucket[5m]))
          > 0.5
        for: 10m
        labels:
          severity: warning
      - alert: HighCommitDurations - NXAWS-DEV-USW2
        annotations:
          description: etcd instance {{ $labels.instance }} commit durations are high
          summary: high commit durations
        expr: histogram_quantile(0.99, rate(etcd_disk_backend_commit_duration_seconds_bucket[5m]))
          > 0.25
        for: 10m
        labels:
          severity: warning
    - name: general.rules
      rules:
      - alert: TargetDown - NXAWS-DEV-USW2
        annotations:
          description: '{{ $value }}% or more of {{ $labels.job }} targets are down.'
          summary: Targets are down
        expr: 100 * (count(up == 0) BY (job) / count(up) BY (job)) > 10
        for: 10m
        labels:
          severity: warning
      - alert: TooManyOpenFileDescriptors - NXAWS-DEV-USW2
        annotations:
          description: '{{ $labels.job }}: {{ $labels.namespace }}/{{ $labels.pod }} ({{
            $labels.instance }}) is using {{ $value }}% of the available file/socket descriptors.'
          summary: too many open file descriptors
        expr: 100 * (process_open_fds / process_max_fds) > 95
        for: 10m
        labels:
          severity: critical
      - alert: K8SKubeletTooManyPods - NXAWS-DEV-USW2
        annotations:
          description: Kubelet {{$labels.instance}} is running {{$value}} pods, close
            to the limit of 110
          runbook: https://confluence.eng.da.com:8443/display/XRE/K8SKubeletTooManyPods
          summary: Kubelet is close to pod limit
        expr: kubelet_running_pod_count > 20
        for: 10m
        labels:
          severity: critical
      - expr: process_open_fds / process_max_fds
        record: instance:fd_utilization
      - alert: FdExhaustionClose - NXAWS-DEV-USW2
        annotations:
          description: '{{ $labels.job }}: {{ $labels.namespace }}/{{ $labels.pod }} ({{
            $labels.instance }}) instance will exhaust in file/socket descriptors soon'
          summary: file descriptors soon exhausted
        expr: predict_linear(instance:fd_utilization[1h], 3600 * 4) > 1
        for: 10m
        labels:
          severity: warning
      - alert: FdExhaustionClose - NXAWS-DEV-USW2
        annotations:
          description: '{{ $labels.job }}: {{ $labels.namespace }}/{{ $labels.pod }} ({{
            $labels.instance }}) instance will exhaust in file/socket descriptors soon'
          summary: file descriptors soon exhausted
        expr: predict_linear(instance:fd_utilization[10m], 3600) > 1
        for: 10m
        labels:
          severity: critical
    - name: job.rules
      rules:
      - alert: CronJobRunning - NXAWS-DEV-USW2
        annotations:
          description: CronJob {{$labels.namespaces}}/{{$labels.cronjob}} is taking more
            than 1h to complete
          summary: CronJob didn't finish after 1h
        expr: time() -kube_cronjob_next_schedule_time > 3600
        for: 1h
        labels:
          severity: warning
    - name: kube-apiserver.rules
      rules:
      - alert: K8SApiserverDown - NXAWS-DEV-USW2
        annotations:
          description: Prometheus failed to scrape API server(s), or all API servers have
            disappeared from service discovery.
          runbook: https://confluence.eng.da.com:8443/display/XRE/K8SApiserverDown
          summary: API server unreachable
        expr: absent(up{job="apiserver"} == 1)
        for: 5m
        labels:
          severity: critical
      - alert: K8SApiServerLatency - NXAWS-DEV-USW2
        annotations:
          description: 99th percentile Latency for {{ $labels.verb }} requests to the
            kube-apiserver is higher than 50s.
          runbook: https://confluence.eng.da.com:8443/display/XRE/APIServerLatencyHigh
          summary: Kubernetes apiserver latency is high
        expr: histogram_quantile(0.99, sum(apiserver_request_latencies_bucket{subresource!="log",verb!~"CONNECT|WATCHLIST|WATCH|PROXY"})
          WITHOUT (instance, resource)) / 1e+06 > 50
        for: 10m
        labels:
          severity: warning
      - alert: APIServerErrorsHigh - NXAWS-DEV-USW2
        annotations:
          description: Critical API server returns errors for {{`{{ $value }}`}}% of requests
          runbook: https://confluence.eng.da.com:8443/display/XRE/APIServerErrorsHigh
          summary: API server request errors
        expr: rate(apiserver_request_count{code=~"^(?:5..)$"}[5m]) / rate(apiserver_request_count[5m])
          * 100 > 10
        for: 10m
        labels:
          severity: critical
      - alert: KubeStateMetricsDown - NXAWS-DEV-USW2
        annotations:
          description: KubeStateMetrics has disappeared from Prometheus target discovery.
          summary: KubeStateMetrics is Down
        expr: absent(up{job="kube-state-metrics"} == 1)
        for: 10m
        labels:
          severity: critical
    - name: kube-controller.rules
      rules:
      - alert: K8SControllerManagerDown - NXAWS-DEV-USW2
        annotations:
          description: There is no running K8S controller manager. Deployments and replication
            controllers are not making progress.
          runbook: https://confluence.eng.da.com:8443/display/XRE/K8SControllerManagerDown
          summary: Controller manager is down
        expr: absent(up{job="kube-controller-manager"} == 1)
        for: 5m
        labels:
          severity: critical
    - name: kube-scheduler.rules
      rules:
      - alert: K8SSchedulerDown - NXAWS-DEV-USW2
        annotations:
          description: There is no running K8S scheduler. New pods are not being assigned
            to nodes.
          runbook: https://confluence.eng.da.com:8443/display/XRE/K8SSchedulerDown
          summary: Scheduler is down\"
        expr: absent(up{job="kube-scheduler"} == 1)
        for: 5m
        labels:
          severity: critical
    - name: kube-state-metrics.rules
      rules:
      - alert: DeploymentGenerationMismatch - NXAWS-DEV-USW2
        annotations:
          description: Observed deployment generation does not match expected one for
            deployment {{$labels.namespaces}}/{{$labels.deployment}}
          runbook: https://confluence.eng.da.com:8443/display/XRE/KubeDeploymentGenerationMismatch
          summary: Deployment is outdated
        expr: kube_deployment_status_observed_generation != kube_deployment_metadata_generation
        for: 10m
        labels:
          severity: warning
      - alert: DeploymentReplicasNotUpdated - NXAWS-DEV-USW2
        annotations:
          description: Replicas are not updated and available for deployment {{$labels.namespaces}}/{{$labels.deployment}}
          runbook: https://confluence.eng.da.com:8443/display/XRE/K8SDeploymentReplicasMismatch
          summary: Deployment replicas are outdated
        expr: ((kube_deployment_status_replicas_updated != kube_deployment_spec_replicas)
          or (kube_deployment_status_replicas_available != kube_deployment_spec_replicas))
          unless (kube_deployment_spec_paused == 1)
        for: 10m
        labels:
          severity: warning
      - alert: DaemonSetRolloutStuck - NXAWS-DEV-USW2
        annotations:
          description: Only {{$value}}% of desired pods scheduled and ready for daemon
            set {{$labels.namespaces}}/{{$labels.daemonset}}
          runbook: https://confluence.eng.da.com:8443/display/XRE/K8SDaemonSetRolloutStuck
          summary: DaemonSet is missing pods
        expr: kube_daemonset_status_number_ready / kube_daemonset_status_desired_number_scheduled
          * 100 < 100
        for: 10m
        labels:
          severity: warning
      - alert: K8SDaemonSetsNotScheduled - NXAWS-DEV-USW2
        annotations:
          description: A number of daemonsets are not scheduled.
          runbook: https://confluence.eng.da.com:8443/display/XRE/K8sDaemonSetNotScheduled
          summary: Daemonsets are not scheduled correctly
          suppressed: "No"
        expr: kube_daemonset_status_desired_number_scheduled - kube_daemonset_status_current_number_scheduled
          > 0
        for: 10m
        labels:
          severity: warning
      - alert: DaemonSetsMissScheduled - NXAWS-DEV-USW2
        annotations:
          description: A number of daemonsets are running where they are not supposed
            to run.
          runbook: https://confluence.eng.da.com:8443/display/XRE/K8sDaemonSetsMissScheduled
          summary: Daemonsets are not scheduled correctly
        expr: kube_daemonset_status_number_misscheduled > 0
        for: 10m
        labels:
          severity: warning
      - alert: PodFrequentlyRestarting - NXAWS-DEV-USW2
        annotations:
          description: Pod {{$labels.namespaces}}/{{$labels.pod}} is was restarted {{$value}}
            times within the last hour
          summary: Pod is restarting frequently
        expr: increase(kube_pod_container_status_restarts_total[1h]) > 5
        for: 10m
        labels:
          severity: critical
    - name: kubelet.rules
      rules:
      - alert: K8SNodeNotReady - NXAWS-DEV-USW2
        annotations:
          description: The Kubelet on {{ $labels.node }} has not checked in with the API,
            or has set itself to NotReady, from last 10 min
          runbook: https://confluence.eng.da.com:8443/display/XRE/K8SNodeNotReady
          summary: Node status is NotReady
        expr: kube_node_status_condition{condition="Ready",status="true"} == 0
        for: 10m
        labels:
          severity: critical
      - alert: K8SManyNodesNotReady - NXAWS-DEV-USW2
        annotations:
          description: '{{ $value }} Kubernetes nodes (more than 10% are in the NotReady
            state).'
          runbook: https://confluence.eng.da.com:8443/display/XRE/K8SManyNodesNotReady
          summary: Many Kubernetes nodes are Not Ready
        expr: count(kube_node_status_condition{condition="Ready",status="true"} == 0)
          > 1 and (count(kube_node_status_condition{condition="Ready",status="true"} ==
          0) / count(kube_node_status_condition{condition="Ready",status="true"})) > 0.2
        for: 5m
        labels:
          severity: critical
      - alert: K8SKubeletDown - NXAWS-DEV-USW2
        annotations:
          description: Prometheus failed to scrape {{ $value }}% of kubelets, or all Kubelets
            have disappeared from service discovery.
          runbook: https://confluence.eng.da.com:8443/display/XRE/K8sKubelet
          summary: Many Kubelets cannot be scraped
        expr: absent(up{job="kubelet"} == 1) or count(up{job="kubelet"} == 0) / count(up{job="kubelet"})
          > 0.1
        for: 5m
        labels:
          severity: critical
      - alert: K8SKubeletTooManyPods - NXAWS-DEV-USW2
        annotations:
          description: Kubelet {{$labels.instance}} is running {{$value}} pods, close
            to the limit of 50
          runbook: https://confluence.eng.da.com:8443/display/XRE/K8SKubeletTooManyPods
          summary: Kubelet is close to pod limit
        expr: kubelet_running_pod_count > 50
        labels:
          severity: critical
    - name: kubernetes.rules
      rules:
      - expr: sum(label_replace(container_spec_memory_limit_bytes{container_name!=""},
          "controller", "$1", "pod_name", "^(.*)-[a-z0-9]+")) BY (cluster, namespace,
          controller, pod_name, container_name)
        record: cluster_namespace_controller_pod_container:spec_memory_limit_bytes
      - expr: sum(label_replace(container_spec_cpu_shares{container_name!=""}, "controller",
          "$1", "pod_name", "^(.*)-[a-z0-9]+")) BY (cluster, namespace, controller, pod_name,
          container_name)
        record: cluster_namespace_controller_pod_container:spec_cpu_shares
      - expr: sum(label_replace(irate(container_cpu_usage_seconds_total{container_name!=""}[5m]),
          "controller", "$1", "pod_name", "^(.*)-[a-z0-9]+")) BY (cluster, namespace,
          controller, pod_name, container_name)
        record: cluster_namespace_controller_pod_container:cpu_usage:rate
      - expr: sum(label_replace(container_memory_usage_bytes{container_name!=""}, "controller",
          "$1", "pod_name", "^(.*)-[a-z0-9]+")) BY (cluster, namespace, controller, pod_name,
          container_name)
        record: cluster_namespace_controller_pod_container:memory_usage:bytes
      - expr: sum(label_replace(container_memory_working_set_bytes{container_name!=""},
          "controller", "$1", "pod_name", "^(.*)-[a-z0-9]+")) BY (cluster, namespace,
          controller, pod_name, container_name)
        record: cluster_namespace_controller_pod_container:memory_working_set:bytes
      - expr: sum(label_replace(container_memory_rss{container_name!=""}, "controller",
          "$1", "pod_name", "^(.*)-[a-z0-9]+")) BY (cluster, namespace, controller, pod_name,
          container_name)
        record: cluster_namespace_controller_pod_container:memory_rss:bytes
      - expr: sum(label_replace(container_memory_cache{container_name!=""}, "controller",
          "$1", "pod_name", "^(.*)-[a-z0-9]+")) BY (cluster, namespace, controller, pod_name,
          container_name)
        record: cluster_namespace_controller_pod_container:memory_cache:bytes
      - expr: sum(label_replace(container_disk_usage_bytes{container_name!=""}, "controller",
          "$1", "pod_name", "^(.*)-[a-z0-9]+")) BY (cluster, namespace, controller, pod_name,
          container_name)
        record: cluster_namespace_controller_pod_container:disk_usage:bytes
      - expr: sum(label_replace(irate(container_memory_failures_total{container_name!=""}[5m]),
          "controller", "$1", "pod_name", "^(.*)-[a-z0-9]+")) BY (cluster, namespace,
          controller, pod_name, container_name, scope, type)
        record: cluster_namespace_controller_pod_container:memory_pagefaults:rate
      - expr: sum(label_replace(irate(container_memory_failcnt{container_name!=""}[5m]),
          "controller", "$1", "pod_name", "^(.*)-[a-z0-9]+")) BY (cluster, namespace,
          controller, pod_name, container_name, scope, type)
        record: cluster_namespace_controller_pod_container:memory_oom:rate
      - expr: 100 * sum(container_spec_memory_limit_bytes{pod_name!=""}) BY (cluster)
          / sum(machine_memory_bytes) BY (cluster)
        record: cluster:memory_allocation:percent
      - expr: 100 * sum(container_memory_usage_bytes{pod_name!=""}) BY (cluster) / sum(machine_memory_bytes)
          BY (cluster)
        record: cluster:memory_used:percent
      - expr: 100 * sum(container_spec_cpu_shares{pod_name!=""}) BY (cluster) / sum(container_spec_cpu_shares{id="/"}
          * ON(cluster, instance) machine_cpu_cores) BY (cluster)
        record: cluster:cpu_allocation:percent
      - expr: 100 * sum(rate(node_cpu{mode!="idle"}[5m])) BY (cluster) / sum(machine_cpu_cores)
          BY (cluster)
        record: cluster:node_cpu_use:percent
      - expr: histogram_quantile(0.99, sum(apiserver_request_latencies_bucket) BY (le,
          cluster, job, resource, verb)) / 1e+06
        labels:
          quantile: "0.99"
        record: cluster_resource_verb:apiserver_latency:quantile_seconds
      - expr: histogram_quantile(0.9, sum(apiserver_request_latencies_bucket) BY (le,
          cluster, job, resource, verb)) / 1e+06
        labels:
          quantile: "0.9"
        record: cluster_resource_verb:apiserver_latency:quantile_seconds
      - expr: histogram_quantile(0.5, sum(apiserver_request_latencies_bucket) BY (le,
          cluster, job, resource, verb)) / 1e+06
        labels:
          quantile: "0.5"
        record: cluster_resource_verb:apiserver_latency:quantile_seconds
      - expr: histogram_quantile(0.99, sum(scheduler_e2e_scheduling_latency_microseconds_bucket)
          BY (le, cluster)) / 1e+06
        labels:
          quantile: "0.99"
        record: cluster:scheduler_e2e_scheduling_latency:quantile_seconds
      - expr: histogram_quantile(0.9, sum(scheduler_e2e_scheduling_latency_microseconds_bucket)
          BY (le, cluster)) / 1e+06
        labels:
          quantile: "0.9"
        record: cluster:scheduler_e2e_scheduling_latency:quantile_seconds
      - expr: histogram_quantile(0.5, sum(scheduler_e2e_scheduling_latency_microseconds_bucket)
          BY (le, cluster)) / 1e+06
        labels:
          quantile: "0.5"
        record: cluster:scheduler_e2e_scheduling_latency:quantile_seconds
      - expr: histogram_quantile(0.99, sum(scheduler_scheduling_algorithm_latency_microseconds_bucket)
          BY (le, cluster)) / 1e+06
        labels:
          quantile: "0.99"
        record: cluster:scheduler_scheduling_algorithm_latency:quantile_seconds
      - expr: histogram_quantile(0.9, sum(scheduler_scheduling_algorithm_latency_microseconds_bucket)
          BY (le, cluster)) / 1e+06
        labels:
          quantile: "0.9"
        record: cluster:scheduler_scheduling_algorithm_latency:quantile_seconds
      - expr: histogram_quantile(0.5, sum(scheduler_scheduling_algorithm_latency_microseconds_bucket)
          BY (le, cluster)) / 1e+06
        labels:
          quantile: "0.5"
        record: cluster:scheduler_scheduling_algorithm_latency:quantile_seconds
      - expr: histogram_quantile(0.99, sum(scheduler_binding_latency_microseconds_bucket)
          BY (le, cluster)) / 1e+06
        labels:
          quantile: "0.99"
        record: cluster:scheduler_binding_latency:quantile_seconds
      - expr: histogram_quantile(0.9, sum(scheduler_binding_latency_microseconds_bucket)
          BY (le, cluster)) / 1e+06
        labels:
          quantile: "0.9"
        record: cluster:scheduler_binding_latency:quantile_seconds
      - expr: histogram_quantile(0.5, sum(scheduler_binding_latency_microseconds_bucket)
          BY (le, cluster)) / 1e+06
        labels:
          quantile: "0.5"
        record: cluster:scheduler_binding_latency:quantile_seconds
    - name: node.rules
      rules:
      - alert: NodeExporterDown - NXAWS-DEV-USW2
        annotations:
          description: Prometheus could not scrape a node-exporter for more than 10m,
            or node-exporters have disappeared from discovery.
          runbook: https://confluence.eng.da.com:8443/display/XRE/node-exporter
          summary: node-exporter cannot be scraped
        expr: absent(up{job="node-exporter"} == 1)
        for: 10m
        labels:
          severity: warning
      - alert: K8SNodeOutOfDisk - NXAWS-DEV-USW2
        annotations:
          description: '{{ $labels.node }} has run out of disk space.'
          runbook: https://confluence.eng.da.com:8443/display/XRE/K8SNodeOutOfDisk
          summary: Node ran out of disk space.
        expr: kube_node_status_condition{condition="OutOfDisk",status="true"} == 1
        labels:
          service: k8s
          severity: critical
      - alert: K8SNodeMemoryPressure - NXAWS-DEV-USW2
        annotations:
          description: '{{ $labels.node }} is under memory pressure.'
          runbook: https://confluence.eng.da.com:8443/display/XRE/K8SNodeMemoryPressure
          summary: Node is under memory pressure.
          suppressed: "No"
        expr: kube_node_status_condition{condition="MemoryPressure",status="true"} ==
          1
        labels:
          service: k8s
          severity: critical
      - alert: K8SNodeDiskPressure - NXAWS-DEV-USW2
        annotations:
          description: '{{ $labels.node }} is under disk pressure.'
          runbook: https://confluence.eng.da.com:8443/display/XRE/K8SNodeDiskPressure
          summary: Node is under disk pressure.
        expr: kube_node_status_condition{condition="DiskPressure",status="true"} == 1
        labels:
          service: k8s
          severity: critical
      - alert: NodeCPUUsage - NXAWS-DEV-USW2
        annotations:
          description: '{{$labels.instance}}: CPU usage is above 90% (current value is:
            {{ $value }})'
          runbook: https://confluence.eng.da.com:8443/display/XRE/NodeCPUUsage
          summary: '{{$labels.instance}}: High CPU usage detected'
        expr: (100 - (avg by (instance) (irate(node_cpu_seconds_total{job="node-exporter",mode="idle"}[5m]))
          * 100)) > 90
        for: 10m
        labels:
          severity: critical
      - alert: NodeMemoryUsage - NXAWS-DEV-USW2
        annotations:
          description: '{{$labels.instance}}: Memory usage is above 90% (current value
            is: {{ $value }})'
          runbook: https://confluence.eng.da.com:8443/display/XRE/NodeMemoryUsage
          summary: '{{$labels.instance}}: High memory usage detected'
        expr: (sum(node_memory_MemTotal_bytes) - sum(node_memory_MemFree_bytes + node_memory_Buffers_bytes
          + node_memory_Cached_bytes) ) / sum(node_memory_MemTotal_bytes) * 100 > 80
        for: 10m
        labels:
          severity: critical
    - name: pods.rules
      rules:
      - alert: MemoryLimit - NXAWS-DEV-USW2
        annotations:
          description: Pod {{$labels.namespaces}}/{{$labels.pod}} reached the memory limit.
          summary: Memory limit reached
        expr: irate(container_memory_failcnt{container_name!=""}[10m]) > 10
        for: 10m
        labels:
          severity: warning
    - name: prometheus.rules
      rules:
      - alert: FailedReload - NXAWS-DEV-USW2
        annotations:
          description: Reloading Prometheus' configuration has failed for {{ $labels.namespace
            }}/{{ $labels.pod}}.
          summary: Prometheus configuration reload has failed
        expr: prometheus_config_last_reload_successful == 0
        for: 10m
        labels:
          severity: critical
      - alert: PrometheusDown - NXAWS-DEV-USW2
        annotations:
          description: Prometheus has disappeared from Prometheus target discovery.
          runbook: https://confluence.eng.da.com:8443/display/XRE/Prometheus+Service
          summary: Prometheus is Down
        expr: absent(up{job="prometheus-k8s"} == 1)
        for: 10m
        labels:
          severity: critical
      - alert: PrometheusOperatorDown - NXAWS-DEV-USW2
        annotations:
          description: Prometheus operator has disappeared from Prometheus target discovery.
          summary: Prometheus Operator is Down
        expr: absent(up{job="prometheus-operator"} == 1)
        for: 10m
        labels:
          severity: critical
kind: ConfigMap
metadata:
  labels:
    managed-by: prometheus-operator
    prometheus-name: k8s
  name: prometheus-k8s-rulefiles-0
  namespace: monitoring

Prometheus configuration file:

insert configuration here (if relevant to the issue)

Logs:

level=info ts=2021-06-03T06:15:28.508Z caller=main.go:222 build_context="(go=go1.16.4, user=root@b595c7f32520, date=20210602-07:50:37)"
level=info ts=2021-06-03T06:15:29.006Z caller=cluster.go:671 component=cluster msg="Waiting for gossip to settle..." interval=2s
level=info ts=2021-06-03T06:15:30.310Z caller=coordinator.go:113 component=configuration msg="Loading configuration file" file=/etc/alertmanager/config/alertmanager.yaml
level=error ts=2021-06-03T06:15:30.311Z caller=coordinator.go:118 component=configuration msg="Loading configuration file failed" file=/etc/alertmanager/config/alertmanager.yaml err="yaml: unmarshal errors:\n  line 16: field receiver already set in type config.plain"
level=info ts=2021-06-03T06:15:30.311Z caller=cluster.go:680 component=cluster msg="gossip not settled but continuing anyway" polls=0 elapsed=1.304325094s

Hi @vignesh-v-nutanix! What you have posted is your Prometheus rules file - can you please post your alertmanager configuration (make sure to exclude any secrets).

@gotjosh somehow i got this working but still i dont get to see the data points for the metrics.

I get to some parts in prometheus expression browser. but still i dont get to see the metrics ..
could you tell me how to fix this.


Binaries are unescaped twice with AR42 + PostgreSQL + prepared statements

Failing test:  https://travis-ci.org/jruby/activerecord-jdbc-adapter/jobs/71944362#L624
Initial investigation shows that the binary content comes unescaped from RubyJdbcConnection (@connection.execute_query(sql, binds)) to ActiveRecord::ConnectionAdapters::JdbcAdapter#exec_query when using prepared statements:
https://github.com/jruby/activerecord-jdbc-adapter/blob/1-3-stable/lib/arjdbc/jdbc/adapter.rb#L449
When not using prepared statements, the result IS escaped.
We need to investigate how to avoid unescaping the result when using prepared statements.
I have not found an obvious place to do that, yet, and all help is appreciated.

@kares any idea where we should put this logic?

My current plan is to make RubyJdbcConnection return an ActiveRecord::Type::Binary::Data object instead of a String when a prepared statement is used.
Initial thought is to propagate the info about prepared statement from the query.  I am thinking there should be a way to detect if the result is escaped, but I haven't found any way to do that.
Also, I have to make sure that the data is actually stored the same way in the DB regardless of wether prepared statements are used.

hmm, these were working fine at some point < 4.2 ... must be something about the "new" AR::Type-system internals ;( ?
if other adapters are doing PSs fine it would be best to not mess with RubyJdbcConnection's API much ... it's used at least for a few projects (the "native" Java parts as well - that is why we need to be careful there)
isn't that a driver bug that the result differs depending on PS ?

I'm starting to look for another solution now.  Just good to know what the problem is :)

noticed as was curious why it's taking so long for my build to finish :) ... the new commits look much better to me - hopefully it will end-up stable in the long term otherwise we should resort to PG's AR::type patching.

One discovery I'd like confirmation on:  It looks like the binary content is stored as a hex escaped string when NOT using prepared statements.  That means the content is not stored as it is, but converted to a hex string with twice the size.  I think THAT is the problem, not the other way around.
So I think the fix should be to ensure the data is stored correctly, and then we should never have to unescape when reading from the database.


parseHash(): "Cannot read property 'length' of undefined" if only access_token is returned

Hi all,
When I set the audience in authParams for an API, Passwordless  Lock works correctly by returning the hash with a full JWT access_token. This now takes place of the previously opaque access_token and a JWT id_token.
However, when I use parseHash() to parse the response, it reports Cannot read property 'length' of undefined because it's apparently still trying to parse id_token (which is now absent).
This could be related to https://github.com/auth0/lock/issues/530. Would it be possible to patch Passwordless Lock to fix this error? Otherwise, we have to decodeURIComponent directly for the time being (I'm using socialOrEmailcode so I have to parse hash manually instead of returning them to a callback). EDIT: we can also include auth0.min.js and use parseHash() from there (though that's still extra work).
Thanks

I'm having the same error.

Can you send a PR with this fix?


Fix mixin name

Simple typo that style checking found.

Grr. Looks like I didn't run the build before I opened that PR. :smirk_cat:
LGTM.