Jaeger client for PHP

OpenTracing API for PHP is available: https://github.com/opentracing/opentracing-php

Finally we have https://github.com/opentracing/opentracing-php, shall we update the issue @yurishkuro ?

Just FYI, we do have someone currently building out the php client: https://github.com/jukylin/jaeger-php

I am working on a client as well.

@jcchavezs are you referring to https://github.com/jcchavezs/jaeger-client-php ?  From what I can tell, https://github.com/jukylin/jaeger-php is further along.  Maybe joining forces with @jukylin would be better?

It's good idea .jukylin/jaeger-php depend on opentracing/opentracing-php, and we can make it more better together.

I believe this one is looking great: https://github.com/jonahgeorge/jaeger-client-php I am thinking on joining @jonahgeorge.

The opentracing/opentracing-php is far from stable. Event it has a 1.0.0-beta release, its latest master branch breaks the API.
So I suppose to depend on when it hits a 1.0.0 release.

The opentracing/opentracing-php is far from stable.

And so is jaeger-php. There is no reason to not start developing the Jaeger implementation. It's easy to change the API.

@felixfbecker It's easy to change the API until you use them in production environment.

If you use a version clearly documented as unstable in production that's your own risk and no reason to artificially slow down development progress.

In https://github.com/jaegertracing/jaeger/issues/366#issuecomment-348703406 @lvht said:

would you like to accept the lvht/jaeger-php as the official PHP client of Jaeger?

I would like to hear from other interested parties. I myself don't have a strong opinion since we do not write applications in PHP at Uber.

We have quite a bit of duplicated work going on here (or parallel efforts, depending on your perspective):

@yuklin is working on https://github.com/jukylin/jaeger-php
@jcchavezs is working on https://github.com/jcchavezs/jaeger-client-php (forked from @jonahgeorge)
@jonahgeorge is working on https://github.com/jonahgeorge/jaeger-client-php
I'm working on https://github.com/qualtrics/jaeger-client-php
@lvht is working on https://github.com/lvht/jaeger-php

Each of these are in various states of feature completeness, stability, opentracing-php compatibility, PHP5/7 compatibility, production-readiness, and maintenance.
Rather than balance five separate projects with one owner each, I propose we make an effort to merge these all into one repo with five owners. This will produce a much higher-quality client than if we each go it alone. @jonahgeorge and I have previously discussed merging our efforts, so maybe that's a place to start. Barring any objections, I'd be happy to own facilitating that.

It's interesting

100 in favor of merging the efforts into an official repository under https://github.com/jaegertracing.
Might be useful to have a feature comparison among the existing implementations, pros/cons. The parent ticket #366 lists the common requirements for an official client lib.

As I said before I am supporting https://github.com/jonahgeorge/jaeger-client-php my only concern is how available is @jonahgeorge. There are still a couple PR.

@tylerchr first of all, I'm personally in favor of combining efforts into a single library.
However, when I was looking over for existing implementations I failed to find one that was well-enough built and used a stack-based approach to automatically define parent-child span relationship.
I'm not sure we can advise to use our library at this point since it lacks documentation and tests, but we are proud of API stability that we were able to achieve.

I assume "stack-based" refers to some form of active span management, which is important but should be solved at the OT API level, just like it was in Java/Python. I think that concern is very different from actually having an official PHP client for Jaeger, even if it doesn't have active span management features yet (because official PHP OT API doesn't have them).

@felixfbecker you start a span - an active context is put on stack, you finish span - you pop the context from the stack. This was (our own) solution coming from requirement not to pass context from layer to layer in the application itself. This is discussed and "rationalized" in some go applications, but it's really different language where this is a general approach.
About concurrency and event-loops: of course, your tracer should be thread-safe in order to work properly there. This is also mentioned in Opentracing documentation. Since you can still inject context and basically clone your tracer in another thread, I don't think this is a concern until async/await support.
As for event loop - I specifically added a possibility to manually specify parent context.
@yurishkuro You are completely right. This was never thought to be an "official" implementation. It does follow the formal requirements and have all necessary (at least for my use-case) features

The stack abstraction doesn't work for concurrent or event-loop-based languages, but PHP isn't concurrent or event-based. As such, a stack does model the in-process lifecycle of a trace very neatly for PHP, in what I believe is a closed-form way. A "push" starts a new span (which is a child of the span on the top of the stack if one exists), and a "push" finishes the top span on the stack. It also has the nice advantage of providing a way to identify all the unfinished spans and close them, in unusual cases like when the script ends without completing execution (usually because someone called die() or exit()).
We did the same thing at Qualtrics see this gist for our basic approach, but our implementation is outside our jaeger-client-php implementation and just works on the opentracing-php API. This seemed ideal because it offered a nice separation of concerns, without forcing my stack implementation on all users of my jaeger-client-php package. To @yurishkuro's point, should some kind of "active span management" functionality be standardized for PHP, it'll be relatively easy to replace.

Hi there.
We've implemented Jaeger client as PHP extension.
Probably, there is a lack of compatibility with all OpenTracing API concepts, but extension covers all our needs and proved itself in a production battle ;)
So feel free to give it a try.

An extension sounds like a great idea, however I'm afraid that in many cases it's simply not an option. It would be awesome though if there would be a userland implementation which could be installed as a fallback when the extension is not available.
Anyway: I haven't worked on a Jaeger PHP client (yet), but I'm willing to join the coordination effort if it brings us any closer to the solution. (Maybe it even helps that I'm not biased 😉 )
I briefly looked into the libraries listed by @tylerchr , they all seem to follow similar concepts. There are differences in quality and implementation of course.
I agree with @yurishkuro that the first step could be a feature comparison. I would also take a look at the concrete solutions as well.
I know some of you expressed support for one or another libraries, but personally I think the best thing to do at this point is to agree on some key concepts based on the above comparisons, and start building a new library under the official jaegertracing org, even if that means copying over a bunch of source code.
That way everyone can equally contribute to the effort, the current libraries stay intact and even when copying source code, we can review the pieces again one by one.

I'd highly recommend the extension route as well if possible. We already have a C++ client and I've been working on a pure C client as well.

@sagikazarmark what you do mean "would not be an option." A huge amount of PHP is implemented in terms of C extensions.

In many environments custom built PHP extensions are not allowed or not possible for whatever reasons.

We could package it via pear or wtvr

I guess it's not a coincidence that many extensions have a userland implementation as well (protobuf, twig to name a few). I'm not arguing that an extension would be better for a number of reasons. But it doesn't suit everyone.

I understand. We will see what the community produces and evaluate any clients for a pure PHP version.

I started working on a feature comparison at the end of last year and never published it. It hasn't been updated since December, but only jonahgeorge/jaeger-client-php and code-tool/jaeger-client-php seem to have had any serious development since then. Perhaps @jonahgeorge and @allflame can update it?
https://docs.google.com/spreadsheets/d/19OTyj63I3YfLa8h4KGsAvljvA_AZDkhSeXYkFlPbnjg/edit#gid=0
@sagikazarmark's suggestion that we align on a set of core principles and then collaborate on a new implementation seems wise. I do suspect that a lot of code from (or derived from) the current implementations will wind up there, but that's just fine if we maintain a consistent bar of quality and polish.

This is really nice!

@tylerchr Great idea!
So as for our implemnentation:

It does support PHP 5.6. Specifically, there is a separate branch 1.0.x with all features backported there - mainly as the consequence of semantic versioning.
Not sure what doest "Configuration" stands for. We tend to configure everything with DI containers like this. There is no standalone class like Factory::fromConfig if that's what you're talking about (we do not like static calls)
I'm not sure why you included HTTP/UDP support here since this is a part of Thrift client library itself. We did write our own UDP one to suppress some error message and remove a lot of (from our point) complicated and unnecessary code. Message: I don't think this should be included in the table, maybe only as "Additional features"
We do have all the samplers that are listed under the opentracing.io "Sampling" section including

Const
Probabilistic
RateLimiting
Adaptive

Latter 2 require apc extension (I think there is no way around to use something even more lightweight if you running it like fpm/cgi/mod and not standalone like react/php-pm/swoole). This will result in a side effect of a minimum Y*X instead of X traces if you have Y installation of application and set adaptive sampler rate to X.
Of course we do not have the Remote sampler since I think it was not opensourced by Uber yet.
I think we can implement Baggage just to add to the supported features, it's just we don't use it.
P.S. We can also build a bridge package to comply with opentracing-php, if someone feels like that would be useful.

Hello! How's the status on this one? Did anyone complete anything?

Hello! How's the status on this one? Did anyone complete anything?

All packages in code-tool org which contains "jaeger" in the name -- stable and works for a long time in production. So from my point of view, it's completed

@asp24 I'm not sure I understand your answer. If there is an official PHP jaeger client, I'm not sure where I could find it (if not on this project page). Furthermore, I see both major developers from the discussion above @jukylin and @jonahgeorge continue to develop on their own.
So my question still stands.

@dragoscirjan we have had a similar situation with the C# client, where a couple of different repositories existed implementing the client, but their authors agreed to join the efforts, which resulted in an official client under the jaegertracing org maintained by the original authors. Something similar needs to happen here; we as core maintainers cannot make the call on which project is a better fit to become official client lib (since none of the core maintainers work with PHP). The first step towards that would be a feature comparison matrix.

If we can get @jukylin's repo accepted into the jaegertracing org, I'm happy to sunset mine

I added the topic of the PHP client to the next Jaeger Project Bi-Weekly meeting: http://bit.do/jaeger-call
Interested parties: please join the meeting, ideally with an agreement about which repo to accept. I'd suggest following @yurishkuro's advice in building a feature comparison matrix, perhaps including the 9 guideline items listed under https://github.com/jaegertracing/jaeger/issues/366 . I'm afraid none of the current maintainers have enough PHP skills to judge and pick one implementation over the other ones.
cc @yuklin @jcchavezs @jonahgeorge @tylerch @lvht @allflame @korchasa

@jukylin's repo still does not support beta 5 of open tracing, https://github.com/jukylin/jaeger-php/issues/21

Was there a decision made on which implementation is likely to go official...?

IIRC, nobody showed up at the meeting. I'm closing this issue, as there seems to be demand from users but no volunteers to organize the merge.

Sorry, it was wrong to close this. We have similar issues for other languages tracked as part of #366 and the issues are kept open until a client is accepted.

Just poking around but it seems that @jukylin 's version make the most sense, we can always bring back support for beta 5 into it. Furthermore he's still really active in his repo since the last 3 years. With that said thank you everybody for working on a solution. @jpkrohling what would you recommend we do in order to move forward on topic?

Can we get a sense of how many people / companies are using https://github.com/jukylin/jaeger-php ?

Reply here, ideally stating name of your company, type of usage (dev, prod, etc.), # of apps/services where lib is deployed, traffic volume if possible.

Company Name: Thrive Market
Usage: Dev, but ideally prod when we have stable version
of Service: +3
Volume:  Our main service in staging is about 500request/minute
Current status: Development

I know some companies using  https://github.com/jukylin/jaeger-php. Maybe I can ask them for help.

Company Name: uxin
Project Name: After sale、Part of uxin finance
Usage: prod
Number of Service in PHP: +10
Volume: 40~100rps/service

Company Name: ETC
Project Name: all
Usage: prod
Number of Project in PHP: +100
Volume: 1k/s

@jukylin just to confirm, are you interested in moving  https://github.com/jukylin/jaeger-php to  https://github.com/jaegertracing ?

No problem

Sounds good. I booked a few issues in the repo that need to be resolves before the move: https://github.com/jukylin/jaeger-php/issues/created_by/yurishkuro

I don't think the other projects, see this previous comment, should be disregarded. Some of them have features the other one does not have, for example the transport options of the qualtrics-one. I don't know if the matrix mentioned earlier is up to date, can't see an edit-date, but it's probably a good idea to update it, both the requirements as well as the compliance of those requirements.
Also, not sure if there's been a decent effort in trying to merge (some of) the projects together and if the concerning devs are (still) up for it. Would be a shame to lose functionality provided by another project because of the adoption of another one, in my opinion.
cc @jukylin @jonahgeorge @qualtrics (@tylerchr) @code-tool (@allflame) (not sure if organisation-mentions work)

@JonasVerhofste From my perspective it doesn't really matter which project we start on as long as we start on a project. Once we have a starting point we can start merging features. My goal is to get an official package that I can use on production with a community behind it.

@zzarbi I get where you're coming from, but it'd be pretty stupid to blindly merge one project and we'd afterwards have to port all the functions from another one, when the other way around would've been less work.
I'm not saying that's the case here, haven't had the time to take a thorough look at the projects yet, I just want to make sure the choice is thought through and we're not creating unnecessary work for anyone.

@JonasVerhofste 100% agree and I wish someone did that in 2017 before everybody started expending their own implementation. I've looked trough the implementation of https://github.com/jukylin/jaeger-php for a POC and I can tell you there is a lot to do and a lot to clean up. This decision can easily be undone once we have an official repo with some people backing it up.

As for usage:
Company name: Evoplay
Project name: hundreds of them
Usage: prod
Number of Services: 120+
Volume: Hard to estimate, sampling with 0.001, cleaning 2TB Elastic index every 2 days
I would say the packagist statistics can be taken into consideration as well
As for the libraries:
I've got a lot of questions why would we write our own when there was already 2 or 3 in place, and I think I answered them here as well:

OOD - existing libraries (at least at the time being) suffered from multiple anti-patterns (static calls, interface segregation, encapsulation violations etc)
There was no way to inject tracer without putting random tracer-related stuff within the application classes, methods etc like Lock::acquire() -> Lock::acquire($context) etc
There were no integration with popular PHP frameworks

I wouldn't go so far as to suggest that our version is better and would advocate on that behalf.
But it's

better for us and for some other people who apparently (according to packagist) are using it.
not designed as a high-level language translator from Go/Java/Javascript version to PHP which is good and bad at the same time
can be integrated into any application without messing with application-level interfaces

I wish someone did that in 2017 before everybody started expending their own implementation

@zzarbi Well, no turning back time. We'll just have to do with what we have right now.

This decision can easily be undone once we have an official repo with some people backing it up.

What do you mean? I don't think undoing the adoption of one project to adopt another one is something that can easily be done, if that's what you mean.

I would say the packagist statistics can be taken into consideration as well

@allflame That's something to go on indeed, but the statistics are quite mixed imo. @jukylin's is starred most, but yours is downloaded more. That's exactly why I said to not to disregard the other ones and make a comparison matrix. Map all the features and see which one has the most support, as to make the transition from the different community libraries to the official library as seamless as possible.
@yurishkuro any opinions on the matter?

@JonasVerhofste For instance what @allflame is talking about, like lack of OOD in @jukylin's implementation is something that can be fixed. A lot of what we're talking about is based on preferences which is why I proposed to stick to the first implementation and then to address all the concern that can be addressed.
The only thing that I think would be hard to change is the choice between a PHP extension or pure PHP. Beside that there is always going to be something we can do better regardless of the decision we make first.

@JonasVerhofste this issue has been in analysis paralysis for almost two years. I tend to agree with @zzarbi that at this point it's more important to make the choice  rather than make the best choice.  Unfortunately, I have zero domain knowledge of PHP, and looks like the other core maintainers are in the same boat, so we cannot provide much architectural guidance. Organizationally, the key to success of a client library is having several knowledgeable and active maintainers, as well as active user base.

Agreed, it's past time for us to pick something and commit to it. Despite authoring one client, I'd much rather have a standard version than see it be my own (which is far from the best one, anyway!). My sense is that each author has an implementation that serves their current needs, and has a lack of either time or interest in building it out further. But this isn't @yurishkuro's problem to solve.

Organizationally, the key to success of a client library is having several knowledgeable and active maintainers, as well as active user base.

For this reason I would really like to see @jukylin, @allflame, @jonahgeorge, and myself all stay involved behind one client. Would each of you be willing to spend time porting your implementations' unique features over to a chosen codebase and trying to use it in your environments? If so let's pick the one with the cleanest design and do that.
A couple things I like from each of the others:

jukylin/jaeger-php looks like the most feature-rich and actively developed.
code-tool/jaeger-client-php seems to be the most idiomatic PHP and has the cleanest repository layout, to my eye.
jonahgeorge/jaeger-client-php is built against the most recent OpenTracing API (1.0.0-beta5) and is the only one of these with a CI pipeline.

Given just this 20-minute exercise, I think I'd be most inclined to take the @allflame's and start bringing things over from the others. Thoughts?
Flushing out the comparison sheet may or may not be helpful in assessing the relative merits. In any case I've opened it up for public edits if that's an exercise someone wants to undertake.

@yurishkuro Would OpenTelemetry affect this thinking at all? One potential solution is just to leave all our jaeger-client-php clients behind and join up on an OpenTelemetry client instead. It may still be too early for that though.

@yurishkuro Would OpenTelemetry affect this thinking at all?

Yes, that is another option. In the longer term we're open to abandoning native Jaeger clients in all languages and fully switching to support OpenTelemetry default implementations (provided that we can get feature parity with Jaeger clients). I don't think this would happen for at least a year for the most used Jaeger clients (essentially the current official ones), but since we don't have an official one for PHP we can  go directly to OpenTelemetry.

If we're planning to move to OpenTelemetry later, I think it would still makes sense to pick any of the current implementation. I picked @jukylin's only because it was the first one and so many other implementation forked it as well. I did not picked it based on implementation, features, coding style because I believe it can be address with some help.

FYI as pointed out earlier in this thread by @allflame, his repo has no documentation. I've been going thought his bridge implementation for Symfony and I don't think wewould be able to help adding the documentation at first. Regarding @jonahgeorge his implementation requires php 7.3 or PECL/hrtime.

As an aside, I’ll all for supporting the OpenTelemetry client

is the effort to come to a single solution/combined effort still ongoing?

Expect it more tricky now in a light of coming PHP 8.0

I think you would have better luck overthere https://github.com/open-telemetry/opentelemetry-php

I for one encourage you all to collaborate on OpenTelemetry's client!

I'm closing this, as I don't think we'll progress with a client for PHP. If you disagree, leave a comment and I'll reopen.

Hey everyone
What's the best library to use with Jaeger for PHP?
I didn't quite understand if we should use opentracing or opentelemetry api for the most recent jaeger backend, because it looks like even all-in-one build is based in opentracing, and opentelemetry is deprecated.

dn't quite understand if we should use opentracing or opentelemetry api for the most recent jaeger ba

Hi @altexdim , I would recommend using the official opentelemetry library https://github.com/open-telemetry/opentelemetry-php as there is a couple of reason behind it.

As you can see on https://opentracing.io/ , now Opentracing and OpenCensus have merged to form Opentelemetry so you can use one single library to have your traces and metrics collected.

Currently seeing the active development status between opentracing and opentelemetry, it can be clearly seen that opentelemetry is having recent commits whereas opentracing had the last commit on January.

Last but not least, opentracing currently supports HTTP sender only, and the reason why there is a lot of forked opentracing branch  as you see above have the UDP support and are duplicate, and in the current scenario though opentelemetry support http sender, there is PR open to have the UDP support in.

@saktib Thank you very much for the quick reply
Actually I completely agree with you, and I was going to try open telemetry with jaeger recently. The idea was to set up the all-in-one jaeger docker container, and install open-telemetry php library, and make it work with very basic setup, just for the proof of concept. But when I opened up the latest documentation regarding jaeger they say that the latest all-in-one docker container with jaeger supports OpenTracing API, and nothing is stated about open-telemetry. They have links to the client libraries for OpenTracing client libraries, and again no links to the open telemetry libraries.
The problem is that It's not clear from the jaeger documentation how to install and how to use open telemetry client libraries with its all-in-one docker container. Do you have by any chance links to any articles that can help me with it?

they say that the latest all-in-one docker container with jaeger supports OpenTracing API, and nothing is stated about open-telemetry

Where did you see this? We might need to change our docs, as the backend has nothing to do with OpenTracing API.

They have links to the client libraries for OpenTracing client libraries, and again no links to the open telemetry libraries.

This page might also need some rewording, as it might be causing some confusion. Jaeger client libraries are implementing the OpenTracing APIs, but there are certainly other clients that folks might use to send data to a Jaeger Collector.

The other issue is that https://github.com/open-telemetry/opentelemetry-php doesnt support UDP yet (which doesnt look good for production environment).

An alternative might be to have an OpenTelemetry Collector as a sidecar to your deployment, playing the role of a Jaeger Agent. You can then make a gRPC connection between your application and the local collector, so that data is offloaded quickly from your application. You should also configure the gRPC client to not retry/queue failures, likely making it as lightweight as Jaeger client sending data via UDP to a local agent.

Where did you see this?

I have a couple of links for you
the documentation with OTEL support 1.21 - https://www.jaegertracing.io/docs/1.21/opentelemetry/
At the moment Jaeger OpenTelemetry binaries are experimental and the configuration or behavior can change. The current progress can be tracked via issues tagged as area/otel.
the latest documentation doesnt even has OTEL section https://www.jaegertracing.io/docs/1.22/deployment/
and even there nothing about otel but only about opentracing https://www.jaegertracing.io/docs/1.22/features/
Native support for OpenTracing
and nothing about OTEL support
https://www.jaegertracing.io/docs/1.22/getting-started/ - this is all-in-one docker container + getting started documentation - again there are references to opentracing and no OTEL
Check the Client Libraries section for information about how to use the OpenTracing API and how to initialize and configure Jaeger tracers.
I also didn't quite understand about removing OTEL collector from the jaeger backend branch - https://github.com/jaegertracing/jaeger/pull/2828
I'm very confused about official support of OTEL in Jaeger :) I coudnt find anything in the official documentation, sorry. It would be nice to have some examples, and all-in-one docker container with the demo client which interacts with all-in-one backend using OTEL, but also without documentation it's not easy to even understand that there's an alternative to opentracing in Jaeger

@altexdim ,
I tried using jaegertracing all-in-one which runs all Jaeger backend components and UI as well so that we don't have to run any sidecar, this is my jaeger container setup on my docker-compose.yml
 jaeger:
   image: jaegertracing/all-in-one:1.20
   environment:
     COLLECTOR_ZIPKIN_HTTP_PORT: 9412
   command: '--log-level debug'
   ports:
     - "5775:5775/udp"
     - "6831:6831/udp"
     - "6832:6832/udp"
     - "5778:5778"
     - "16686:16686"
     - "14268:14268"
     - "14250:14250"
     - "9411:9411"
     - "9412:9412"

To use the opentelemetry client library, you can go through the examples https://github.com/open-telemetry/opentelemetry-php/tree/main/examples , specifically the AlwaysOnJaegerExample.php which shows the way how the exporter object is getting initialized using jager.

I see the confusion. The mentions to OpenTelemetry are related to the backend component, collector. We removed the documentation for it because the previous work on making Jaeger based on OpenTelemetry Collector has changed.
The mentions to OpenTracing are about the client APIs. The Jaeger Client libraries implement the OpenTracing interfaces so that applications instrumented using the OpenTracing APIs could use the Jaeger Client with it.
In the context of this ticket, PHP support is something that is relevant for the client libraries only. That said, no official Jaeger Client will be released for PHP, but you are certainly encouraged to use the OpenTelemetry PHP API and SDK, which should provide an exporter for Jaeger Collector.
I hope this clarifies a bit.

ok , I Know that ！ PHP is the language that raised by stepmother .  Do not have an Official Client for Yaeger Really Bothered me T_T


Uncaught, unspecified 'error' event

Hi !
For the first time i'm facing a problem with EE2, here is the code:
let net = require('net')
let ev = require('eventemitter2').EventEmitter2
let myProject = function(host, port) {
  ev.call(this)
  let self = this
  let socket = net.connect(port, host)
  socket.on("error", function(e) {
    // here
    self.emit("error", "Socket", e.syscall + ' ' + e.errno + ' on ' + e.host + ':' + e.port)
  })
util.inherits(myProject, ev)
exports = module.exports = myProject

Each time i got this error Uncaught, unspecified 'error' event, when i change the event name for any other name the event is correctly emitted.
I don't understand why i have this behavior, this kind of feature works on any other components of my project.

Could you please post the stack trace from the error as well as the version of EE2 you have installed?

It seems that if you are not listening on the error event when it is emitted EvenEmmiter will throw this error.
The error can be reproduced like this
const EventEmitter2 = require('eventemitter2').EventEmitter2;
const events = new EventEmitter2();

console.log('sending first error event');
try {
  events.emit('error', 'The error data');
} catch(e) {
  console.log('caught error', e);
}

events.on('error', (error) => { console.log('got error event', error); });
console.log('sending second error event');
try {
  events.emit('error', 'The error data');
} catch(e) {
  console.log('caught error', e);
}

sending first error event
caught error Error: Uncaught, unspecified 'error' event.
    at EventEmitter.emit (/home/agirorn/code/test/node_modules/eventemitter2/lib/eventemitter2.js:398:15)
    at Object.<anonymous> (/home/agirorn/code/test/t.js:6:10)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.runMain (module.js:604:10)
    at run (bootstrap_node.js:383:7)
    at startup (bootstrap_node.js:149:9)
sending second error event
got error event The error data

Thanks for the details, sadly I'm a bit busy at the moment, but a PR seems like it wouldn't be too hard to do and would be very much welcome!

I think think this is a similar case to the uncaught promise exception. When it occurs in node.js it is output to the console and the unhandledRejection event is sent. Could this be similar and somehow use the node.js process.on('warning', cb) Event: 'warning' to notify that this occurred and not throw an error that may end up killing the process?
I checked in node 6.12.0 and the process object is an event emitter object and can be used to do this.
process.on('warning', (m) => console.log(`got warning ${m}`));
process.emit('warning', 'test')
=> got warning test
=> true

Would that be an acceptable solution to this?


Iterator isn't iterable internally

Zephir 0.7.1b
I've created a simple iterable class:
namespace MyIterators;

class MyCollection implements \Iterator, \Countable {
    protected position = 0;

    protected entries = [];

    public function count()
    {
        return count(this->entries);
    }

    public function rewind() -> void
    {
        let this->position = 0;
    }

    public function current()
    {
        return this->entries[this->position];
    }

    public function key()
    {
        return this->position;
    }

    public function next() -> void
    {
        let this->position++;
    }

    public function valid()
    {
        return isset this->entries[this->position];
    }

    public function add(value) -> void
    {
        let this->entries[] = value;
    }

    public function merge(<MyCollection> collection) -> void
    {
        var value;

        for value in collection {
            this->add(value);
        }
    }
}

and a simple PHP script to test it
$a = new MyIterators\MyCollection();
$a->add('A');
$a->add('B');
$a->add('C');

foreach($a as $key => $value) {
    echo $key, ' => ', $value, PHP_EOL;
}
echo PHP_EOL;

$b = new MyIterators\MyCollection();
$b->add('X');
$b->add('Y');
$b->add('Z');

foreach($a as $key => $value) {
    echo $key, ' => ', $value, PHP_EOL;
}
echo PHP_EOL;

$a->rewind();
$b->rewind();

$a->merge($b);

foreach($a as $key => $value) {
    echo $key, ' => ', $value, PHP_EOL;
}
echo PHP_EOL;

PHP is able to iterate happily over each instance of the collection, so there's no problem there; but as soon as I call the merge() method which tries to iterate internally over the passed argument
        for value in collection {
            this->add(value);
        }

I get a fatal error from the collection
PHP Fatal error:  Uncaught exception 'Exception' with message 'The argument is not initialized or iterable()' in myiterators/mycollection.zep:50

The stack trace isn't particularly helpful
Stack trace:
#0 /home/zephir/myiterators/iteratorTest.php(29): MyIterators\MyCollection->merge(Object(MyIterators\MyCollection))
#1 {main}
  thrown in myiterators/mycollection.zep on line 50

But it seems that Zephir can't iterate over classes created in Zephir as iterable, even though a basic PHP script does see them as iterable.... or am I missing something fundamental?

---
Want to back this issue? **[Post a bounty on it!](https://www.bountysource.com/issues/26649304-iterator-isn-t-iterable-internally?utm_campaign=plugin&utm_content=tracker%2F280146&utm_medium=issues&utm_source=github)** We accept bounties via [Bountysource](https://www.bountysource.com/?utm_campaign=plugin&utm_content=tracker%2F280146&utm_medium=issues&utm_source=github).

Does
for value in iterator(collection) {             this->add(value);         }
work?

Bingo, that works thanks.... is it documented anywhere?

I think it's indeed missing in the official documentation,
but there's a test case for it.


Create utility to generate polynomial roots in Julia src

Fixed with help from Eric, 1/2/22 release.


registry.get_or_assign does not change component

Correct me if I am wrong but when this code is run
int dx = 1;
int dy = 2;
registry.assign_or_replace<cMove>(player, 0, 0);
auto mover = registry.get_or_assign<cMove>(player);
mover.x = mover.x + dx;
mover.y = mover.y + dy;
auto check = registry.get_or_assign<cMove>(player);

Shouldn't check be x = 1 and y=2?
what I get is x=0 and y=0

get_or_assign returns a reference as many of the other member functions. Let's look at your snippet:
auto mover = registry.get_or_assign<cMove>(player);

You're making a copy of the returned instance here, then you modify the copy rather than the component within the registry.
Change the line above with the following one:
auto &mover = registry.get_or_assign<cMove>(player);

This should solve your issue.

I assume that was the error. I'm closing the issue. Feel free to reopen it if your problem isn't solved.

Thank you I am fairly sure it was indeed a I need more sleep error. (I just got back into C++ after a long time in languages that for you) I will confirm this soon and post result in the hopes this can help out someone else.


Fix broken button in 'Get Started With The Console' tutorial

What's changed, or what was fixed?

Fix broken "Log Numbers" button by removing {% verbatim %} & {% endverbatim %} tags
Closing all <img> tags

Fixes: #6574

[ ] This has been reviewed and approved by (NAME)
[x] I have run npm test locally and all tests pass.
[x] I have added the appropriate type-something label.
[x] I've staged the site and manually verified that my content displays correctly.

CC: @petele

@kaycebasques - can you review/merge please.

@kaycebasques - any updates on this?

@petele checking it out now...

:tada: This has been pushed live to https://developers.google.com/web/


[Bug] .Net framework needs dll in output dir

supporting the lowest version 4.8.1. .net core handls it well. but 4.8.1 requires native dlls to be in outputfolder


RUM-4371 Extract OpenTelemetry support sdk into a dedicated module

What does this PR do?
A brief description of the change being made with this pull request.
Motivation
What inspired you to submit this pull request?
Additional Notes
Anything else we should know when reviewing?
Review checklist (to be filled by reviewers)

[ ] Feature or bugfix MUST have appropriate tests (unit, integration, e2e)
[ ] Make sure you discussed the feature or bugfix with the maintaining team in an Issue
[ ] Make sure each commit and the PR mention the Issue number (cf the CONTRIBUTING doc)

Codecov Report
Attention: Patch coverage is 88.88889% with 8 lines in your changes are missing coverage. Please review.

Project coverage is 63.58%. Comparing base (a0e5b5f) to head (1e98819).
Report is 2 commits behind head on feature/otel-support.

Additional details and impacted files
@@                   Coverage Diff                    @@
##           feature/otel-support    #2021      +/-   ##
========================================================
- Coverage                 63.92%   63.58%   -0.35%
========================================================
  Files                       752      751       -1
  Lines                     28382    28336      -46
  Branches                   4686     4679       -7
========================================================
- Hits                      18143    18015     -128
- Misses                     9036     9124      +88
+ Partials                   1203     1197       -6

Files
Coverage Δ

...elemetry/context/propagation/TraceStateHelper.java
0.00% <ø> (ø)

...m/datadog/opentelemetry/trace/OtelConventions.java
26.58% <ø> (ø)

...adog/opentelemetry/trace/OtelExtractedContext.java
0.00% <ø> (ø)

...java/com/datadog/opentelemetry/trace/OtelSpan.java
59.38% <ø> (ø)

...m/datadog/opentelemetry/trace/OtelSpanBuilder.java
24.59% <ø> (ø)

...m/datadog/opentelemetry/trace/OtelSpanContext.java
58.33% <ø> (ø)

.../com/datadog/opentelemetry/trace/OtelSpanLink.java
0.00% <ø> (ø)

...va/com/datadog/opentelemetry/trace/OtelTracer.java
100.00% <ø> (ø)

...datadog/opentelemetry/trace/OtelTracerBuilder.java
87.50% <ø> (ø)

...datadog/android/trace/opentelemetry/OtelContext.kt
90.00% <ø> (ø)

... and 11 more

... and 46 files with indirect coverage changes

Docs were flagged to review due to features/dd-sdk-android-trace-otel/README.md. Do you intend to add more content here? Let me know, and we can take a look!

@brett0000FF yes we have a special task for docs in the README.md + docs in the public page.


You guys may keep the release note of WechatSDK which you used

Just like the title said.

Added on README#build about SDK versions.


Remove object finalizer

relates to MONO-469
In ruby 3 this generates warning: finalizer references object to be finalized, so probably this wasn't work properly, so I just remove this. We already added metrics flush at exit, so I think this should be enough

Related rdkafka issue, but I anyway think we should be fine without it


Replacing UITextField with UITextView and adaptive height

Hi, I tried to replace the UITextField with UITextView to support adaptive height with max of 5 lines, but experiencing the UITextView scrollView keep scrolling whenever editing begin. Do you know how to overcome the issue?

The experience happens from the time UITextField begin editing.
When UITextField do NOT begin editing, can't it.


Unable to download VOD from twitcasting.tv

Checklist

[x] I'm reporting a broken site support
[x] I've verified that I'm running youtube-dl version 2021.06.06
[x] I've checked that all provided URLs are alive and playable in a browser
[x] I've checked that all URLs and arguments with special characters are properly quoted or escaped
[x] I've searched the bugtracker for similar issues including closed ones

Verbose log

> .\youtube-dl.exe --verbose --add-header "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36" --add-header "Origin: https://twitcasting.tv" https://dl01.twitcasting.tv/tc.vod/v/686822522.0.2-1623256184-1623284984-8c7d244a-a574077b2e4b8308/fmp4/index.m3u8
[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: ['--verbose', '--add-header', 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36', '--add-header', 'Origin: https://twitcasting.tv', 'https://dl01.twitcasting.tv/tc.vod/v/686822522.0.2-1623256184-1623284984-8c7d244a-a574077b2e4b8308/fmp4/index.m3u8']
[debug] Adding header from command line option User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36
[debug] Adding header from command line option Origin: https://twitcasting.tv
[debug] Encodings: locale cp1252, fs mbcs, out cp850, pref cp1252
[debug] youtube-dl version 2021.06.06
[debug] Python version 3.4.4 (CPython) - Windows-10-10.0.19041
[debug] exe versions: ffmpeg 4.4-full_build-www.gyan.dev, ffprobe 4.4-full_build-www.gyan.dev
[debug] Proxy map: {}
[generic] index: Requesting header
WARNING: Could not send HEAD request to https://dl01.twitcasting.tv/tc.vod/v/686822522.0.2-1623256184-1623284984-8c7d244a-a574077b2e4b8308/fmp4/index.m3u8: HTTP Error 502: Bad Gateway
[generic] index: Downloading webpage
ERROR: Unable to download webpage: HTTP Error 502: Bad Gateway (caused by HTTPError()); please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
  File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\ytdl-org\tmpkqxnwl31\build\youtube_dl\extractor\common.py", line 634, in _request_webpage
  File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\ytdl-org\tmpkqxnwl31\build\youtube_dl\YoutubeDL.py", line 2288, in urlopen
  File "C:\Python\Python34\lib\urllib\request.py", line 470, in open
  File "C:\Python\Python34\lib\urllib\request.py", line 580, in http_response
  File "C:\Python\Python34\lib\urllib\request.py", line 508, in error
  File "C:\Python\Python34\lib\urllib\request.py", line 442, in _call_chain
  File "C:\Python\Python34\lib\urllib\request.py", line 588, in http_error_default

Description

I checked other similar issues (https://github.com/yt-dlp/yt-dlp/issues/220 in particular) and tried these two commands (also with double quotes for the .m3u8 link):
> .\youtube-dl.exe --verbose --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36" --add-header "Origin: https://twitcasting.tv" https://dl01.twitcasting.tv/tc.vod/v/686822522.0.2-1623256184-1623284984-8c7d244a-a574077b2e4b8308/fmp4/index.m3u8

> .\youtube-dl.exe --verbose --add-header "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36" --add-header "Origin: https://twitcasting.tv" -i https://dl01.twitcasting.tv/tc.vod/v/686822522.0.2-1623256184-1623284984-8c7d244a-a574077b2e4b8308/fmp4/index.m3u8

Both of them led to "Error 502: Bad Gateway"
I also used this:
> .\ffmpeg -re -user_agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36" -headers "Origin: https://twitcasting.tv" -n -i "https://dl01.twitcasting.tv/tc.vod/v/686822522.2.2-1623256184-1623284984-8c7d244a-6736bdbb96e2e570/fmp4/index.m3u8" -c copy -bsf:a aac_adtstoasc -f mp4 test_nanoch_1.mp4

The video I'm trying to download is this one: https://twitcasting.tv/angelnano1004/movie/686822522

If you've extracted m3u8 url from the browser, try adding --referer https://twitcasting.tv/
And I did another way.
#1. Open the page and save cookie file.
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36" https://twitcasting.tv/angelnano1004/movie/686822522 -c cookie.txt >/dev/null

#2. Open the page again using the cookie file and extract m3u8 url.
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36" https://twitcasting.tv/angelnano1004/movie/686822522 -b cookie.txt | gsed -n "/.*data-movie-playlist='/{s///;s/'$//;p;}" | jq -r ".\"2\"[0].source.url"

output: (changes every time)
https://dl01.twitcasting.tv/tc.vod/v/686822522.0.2-1624474988-1624503788-8e4e3a28-81eb8c2c030a7352/fmp4/index.m3u8

#3. Open m3u8 url with the same user-agent and give referer. (ffmpeg will be used for download anyways.)
youtube-dl --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36" --referer https://twitcasting.tv/ -o "686822522.%(ext)s" https://dl01.twitcasting.tv/tc.vod/v/686822522.0.2-1624474988-1624503788-8e4e3a28-81eb8c2c030a7352/fmp4/index.m3u8

It was also possible to use fake cookie.
#1'. Make fake cookie.
python -c "import uuid; print(uuid.uuid4().hex)"

output: (changes every time)
fda26e4110f54f0abf77f92761f2e49d

Use this value in the above #2. (as -b did=fda26e4110f54f0abf77f92761f2e49d instead of -b cookie.txt)


Change influxdb export to use an independent influxdb client repo (issue 1173)

Change influx export to use an independent influxdb client repo to solve #1174
Now the dependent components only takes around 336K of disk space instead of 142M
Have done some local testing, export to influxdb works as before.

recheck

recheck

@davidmsh Please rebase.

Closing to replace with #1230


Duplicate Keys Warning in Home Assistant Logs

Seeing these messages in the logs:
WARNING (SyncWorker_3) [homeassistant.util.yaml.loader] YAML file /config/themes/m3-xx-yyyy/m3-c11-purple.yaml contains duplicate key "theme-sys-ha-disabled-text-color". Check lines 535 and 537
WARNING (SyncWorker_3) [homeassistant.util.yaml.loader] YAML file /config/themes/m3-xx-yyyy/m3-c11-purple.yaml contains duplicate key "theme-sys-ha-card-background-color-active". Check lines 549 and 550
WARNING (SyncWorker_3) [homeassistant.util.yaml.loader] YAML file /config/themes/m3-xx-yyyy/m3-c11-purple.yaml contains duplicate key "theme-sys-ha-accent-color". Check lines 856 and 879
WARNING (SyncWorker_3) [homeassistant.util.yaml.loader] YAML file /config/themes/m3-xx-yyyy/m3-c11-purple.yaml contains duplicate key "label-badge-text-color". Check lines 1005 and 1075
WARNING (SyncWorker_3) [homeassistant.util.yaml.loader] YAML file /config/themes/m3-xx-yyyy/m3-c11-purple.yaml contains duplicate key "ha-label-badge-label-color". Check lines 1006 and 1076
WARNING (SyncWorker_3) [homeassistant.util.yaml.loader] YAML file /config/themes/m3-xx-yyyy/m3-xx-yyyy.yaml contains duplicate key "theme-sys-ha-disabled-text-color". Check lines 271 and 273
WARNING (SyncWorker_3) [homeassistant.util.yaml.loader] YAML file /config/themes/m3-xx-yyyy/m3-xx-yyyy.yaml contains duplicate key "theme-sys-ha-card-background-color-active". Check lines 285 and 286
WARNING (SyncWorker_3) [homeassistant.util.yaml.loader] YAML file /config/themes/m3-xx-yyyy/m3-xx-yyyy.yaml contains duplicate key "theme-sys-ha-accent-color". Check lines 592 and 615

It looks like a false positive warning. Line 535 is commented out and 537 is active but the warning is picking up both lines as being active.


feat(core/cli) add docker release stage with sensible default

Following the discussion, https://github.com/pipelinit/pipelinit-cli/issues/34;
this PR implements a release stack for docker images that can be built in the repository and
with that adds a sensitive default to the Pipelinit configuration file with the possibility to other 'registries' for the generated CI.
The template basically looks for paths with Dockerfiles that can be built and
adds metadata involving the path found and the specified version.
Resolves: https://github.com/pipelinit/pipelinit-cli/issues/80
To test:

Run Pipelinit on a project with a docker file, then configure the secrets accordingly on GitHub and check if the generated pipeline correctly push the image to the registries.

Example:

Using ghcr.io:

https://github.com/orgs/pipelinit/packages?repo_name=pipelinit-sample-docker
https://github.com/pipelinit/pipelinit-sample-docker/runs/3899104124?check_suite_focus=true

Using registry.hub.docker.com:

https://hub.docker.com/u/jjvlima
https://github.com/pipelinit/pipelinit-sample-docker/runs/3898871153?check_suite_focus=true

Tested with @gutocosta the CI generation and attended the issue, opened https://github.com/pipelinit/pipelinit-cli/issues/158 for a future improvement


Clarify text on ctr support/inclusion

Add some clarifying language around the expectations on ctr.
Signed-off-by: Phil Estes<EMAIL_ADDRESS>

LGTM


Opt-in message signing for custom topics

This is a feature request
Problem
There is currently no prevention/mitigation/protection of spam messages.
Opt-in message signing for custom topics is the first protection mechanism to be delivered.
specs: https://rfc.vac.dev/spec/57/#dos-protection
Milestone issue: https://github.com/waku-org/pm/issues/20
Reference implementation: https://github.com/waku-org/nwaku/blob/5b9f715510de7494d7d7d0a0c1aee5a18ccdb002/apps/wakunode2/wakunode2_validator_signed.nim#L38-L50
Proposed Solutions

[ ] Do same validation in relay, see how we validate messages already: https://github.com/waku-org/js-waku/blob/619f6b6caec5126a14b4f0b1c33c21b1acc862fb/packages/core/src/lib/relay/index.ts#L210
[ ] Implement logic when sending messages with relay
[ ] Same with light push
[ ] ?? for filter: @alrevuelta should we verify messages received over filter too? Might make sense to have it in place yet not take action on remote node.

Notes
This should be a plug-in that one might want to use for their app. Hence I'd expect a new package that handles the signing logic (provide an encoder) and also exposes a topic validator, topic validator should be passed directly to relay and assume a (msg: WakuMessage) => number interface (TBC).
Also, probably want to provide an API directly on relay to enable managing topic validators instead of asking dev to manipulate the gossipSub object.
When picking up this issue, feel free to contact @richard-ramos and @alrevuelta to get a kick off call organised.
Finally, with https://github.com/waku-org/js-waku/issues/1310 we are moving away from custom strings for pubsub topic but instead using a predefined string format with shard and cluster indexes.
Hence, best to do https://github.com/waku-org/js-waku/issues/1310 first and then do this issue so that the topic validator can be applied to a specific shard + cluster.
Testnet network available: https://discord.com/channels/864066763682218004/1064649971497971862/1106515494908985365

Need to review with Status if this is really needed.

Check with John during the call.
JS-Waku is initially used for two webapps:

Preview page when a user does not have Status app installed, it shows a preview of the Community or contact profile (?) using metadata retrieved from Waku store
Community Curation Directory Dapp: retrieves metadata about community from Waku store.

In either instance, it's read only using Waku store (and possibly filter) protocol.
Opt-in message signing is needed to :

Send messages
Check messages signature (mostly for relay)

In this context, we can expect the remote node to have done the checking and no message sending is sent.
Hence, I do not believe this work is needed.
Regarding the Status Web. The usage of opt-in message signing is only needed for static sharding. Depending when Status Web is re-prioritized and the type of sharding used by Status (static vs auto) then we can review the priority of this item.
@prichodko would you agree with the above? Just wanting to double check.


fix: manage mat-content-palette like a special palette

Issue
na
Description
corrects the non-presence of lighter in mat-content-palette
Additional context

Gravitee.io Automatic Deployment
A prerelease version of this package has been published! 🚀
To use it in your project run the following lines:
npm install<EMAIL_ADDRESS># or
yarn add<EMAIL_ADDRESS>

Gravitee.io Automatic Deployment
A prerelease version of this package has been published! 🚀
To use it in your project run the following lines:
npm install<EMAIL_ADDRESS># or
yarn add<EMAIL_ADDRESS>

:tada: This PR is included in version 2.0.1 :tada:
The release is available on:

npm package (@latest dist-tag)
npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Add new lock strategy that allow run mort in multi instance mode - RedisLock

If we like to run mort in a multi-instance mode it should have an opportunity to acquiring a lock that is shared between instances. For purpose of such locking most suitable is redis.
Tasks:

implement redis lock (save only buffered response in redis)
add configuration that allows user choose lock strategy (Memory, Nop, Redis)
update doc
write tests

Will be done in #29


If fullscreen and the media ends there is no button to leave full screen

The only way out is the escape key or starting the media again to get the button back to click.
I think the easiest solution would be to quit full screen when the media ends.

I did a quick research with the most used players:

vimeo: does exactly what you proposed;
youtube: doesn't exit fullscreen, instead, it offers more content [it could be a plugin, end of the video] and shows permanently the media control;
netflix: offers content and jump to the "sequence" or
we can came up with something new (or mixed solution).

I personally think we should take advantage when user is on fullscreen. @gofdias what are you thoughts on this?

@gofdias suggested the same the last time we spoke. I think exiting fullscreen on video end would be the simplest way of solving this.
Perhaps this behavior could be changed by plugins, which could in turn play the next item n a sequence/playlist or present recommendations, like the end screen on youtube.

I noticed this a couple days back and was thinking about creating a plugin to exit fullscreen. I agree with @towerz, Clappr providing a basic behavior (through a plugin that users could override) would do the trick for most of use cases.

Yes I think a default plugin which could be overridden which just exits full screen seems good.

:+1:


CI / datapath: enable label-dependent L4 in datapath and add label-based egress CI tests

Changes:

bpf (@joestringer) : add label-based egress enforcement, including label-based L3, and label-based L3-dependent L4. This does not add L3-dependent L7, which is still yet to be merged by @jrajahalme .
test (@ianvernon): Add a variety of label-based egress tests to the runtime CI. Multinode tests still need to be added and validated. Will add those ASAP.
pkg/endpoint (@ianvernon): use correct label access call in checkEgressAccess.

Myself / @joestringer  would like feedback for the datapath portions + tests multinode tests are developed.
Signed-off by: Ian Vernon<EMAIL_ADDRESS>

test-me-please

Failure is legitimate.
The tests have to be updated because egress policy enforcement is enabled, and now the datapath rejects traffic which does not have a PolicyMap entry for egress traffic if egress policy enforcement is enabled. Thus, egress rules have to be added to the policies for RuntimeValidatedConntrackTest Conntrack-related configuration options for endpoints.

Seeing odd behavior for ICMPv6 when Conntrack endpoint configuration option is disabled. Messaged @joestringer on Slack.

@ianvernon @joestringer Datapath changes look good! The CIDR + L4 bug would need to be fixed as a blocker regardless of whether we can merge this but it looks like we are really close anyway.

test-me-please

test-me-please

Looking into test failure. This has not occurred before, might be a flake. Need to triage.

The test failed, but I was unable to get much data from the logs, due to https://github.com/cilium/cilium/issues/3402 .

VM was unable to boot correctly:
22:17:06     k8s1-1.7: E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
22:17:06     k8s1-1.7: E: Unable to lock directory /var/lib/apt/lists/
22:17:06 The SSH command responded with a non-zero exit status. Vagrant
22:17:06 assumes that this means the command failed. The output for this command
22:17:06 should be in the log above. Please read the output to determine what
22:17:06 went wrong.
22:17:06

Retriggering CI.

test-me-please


Fix JSX highlighting for jsx files

Building up on #127 , I've added a bunch of tests for JSX and JavaScript files, and then fixed the problems that were there.
The main issues were:

Improper query inheritance. ecma was not used but defined some useful patterns. javascript reimplemented some of ecma.
Missing jsx node types in javascript levels

Read commit messages for more context on these changes.
I've cleaned up the code and fixed these problems. Now the inheritance should be cleaner and there should not unused files in the inheritance hierarchy.
This fixes #126
Real-life results in JS(X?) files
extended.jsx

extended.js

Test results
All tests are passing :rocket:

Thanks!


Apparent bug with for loops

I only know a little about how the fuzzing process works, and barely at all about how atheris instruments the bytecode, but I've noticed the following discrepancy:
import atheris

with atheris.instrument_imports():
    import sys

@atheris.instrument_func
def Fuzz(data: bytes):
    string = 'thisisalongstringtotestatherisandtomakesurethatithandlesaforloopcorrectly'

    if len(data) < 1:
        return

    fdp = atheris.FuzzedDataProvider(data)

    data_unicode = fdp.ConsumeUnicode(len(data))

    if len(data_unicode) <= 0 or data_unicode[0] != "t":
        return
    elif len(data_unicode) <= 1 or data_unicode[1] != "h":
        return
    ...<repetitive source code elided for brevity>...
    elif len(data_unicode) <= 71 or data_unicode[71] != "l":
        return
    elif len(data_unicode) <= 72 or data_unicode[72] != "y":
        return
    raise ValueError("BOOM!")

if __name__ == '__main__':
    atheris.Setup(sys.argv, Fuzz)
    atheris.Fuzz()

works fine, but when I condense it into a for loop:
import atheris

with atheris.instrument_imports():
    import sys

@atheris.instrument_func
def Fuzz(data: bytes):
    string = 'thisisalongstringtotestatherisandtomakesurethatithandlesaforloopcorrectly'

    if len(data) < 1:
        return

    fdp = atheris.FuzzedDataProvider(data)

    data_unicode = fdp.ConsumeUnicode(len(data))

    for i in range(len(string)):
        if len(data_unicode) <= i or data_unicode[i] != string[i]:
            break
    else:
        raise ValueError("BOOM!")

if __name__ == '__main__':
    atheris.Setup(sys.argv, Fuzz)
    atheris.Fuzz()

Expected behaviour:
Both examples take a comparable amount of time (taking into consideration that the unrolled loop is probably faster) and finish with the completed string as a crash example.
Observed behaviour:
The for loop doesn't finish, and only gets a few character right at once
Further notes:
Because both are functionally equivalent, I wouldn't expect the for loop to take so much longer (at this stage it's looking like a heat death kind of slow).

running with -reduce_inputs=0 certainly helps the unrolled version run faster, but the first version still doesn't finish with that on or off. Here is a log from the rolled up for loop version:
python ./atheris_test.py -reduce_inputs=0
INFO: Using built-in libfuzzer
WARNING: Failed to find function "__sanitizer_acquire_crash_state".
WARNING: Failed to find function "__sanitizer_print_stack_trace".
WARNING: Failed to find function "__sanitizer_set_death_callback".
INFO: Running with entropic power schedule (0xFF, 100).
INFO: Seed:<PHONE_NUMBER>
INFO: -max_len is not provided; libFuzzer will not generate inputs larger than 4096 bytes
INFO: A corpus is not provided, starting from an empty corpus
#2      INITED cov: 5 ft: 5 corp: 1/1b exec/s: 0 rss: 36Mb
#11     NEW    cov: 6 ft: 6 corp: 2/3b lim: 4 exec/s: 0 rss: 36Mb L: 2/2 MS: 4 InsertByte-ChangeBit-ChangeBit-ChangeByte-
#1521   NEW    cov: 6 ft: 8 corp: 3/5b lim: 17 exec/s: 0 rss: 36Mb L: 2/2 MS: 5 InsertByte-ShuffleBytes-ChangeByte-ChangeBinInt-ShuffleBytes-
#1551   NEW    cov: 6 ft: 9 corp: 4/8b lim: 17 exec/s: 0 rss: 36Mb L: 3/3 MS: 5 EraseBytes-CopyPart-ChangeBinInt-ChangeByte-InsertByte-
#17804  NEW    cov: 6 ft: 12 corp: 5/43b lim: 177 exec/s: 0 rss: 36Mb L: 35/35 MS: 3 ChangeBit-CrossOver-InsertRepeatedBytes-
#20742  NEW    cov: 6 ft: 15 corp: 6/79b lim: 205 exec/s: 0 rss: 36Mb L: 36/36 MS: 3 CrossOver-CrossOver-ChangeBit-
#524288 pulse  cov: 6 ft: 15 corp: 6/79b lim: 4096 exec/s: 262144 rss: 36Mb
#1048576        pulse  cov: 6 ft: 15 corp: 6/79b lim: 4096 exec/s: 262144 rss: 36Mb
#2097152        pulse  cov: 6 ft: 15 corp: 6/79b lim: 4096 exec/s: 233016 rss: 36Mb
#4194304        pulse  cov: 6 ft: 15 corp: 6/79b lim: 4096 exec/s: 209715 rss: 36Mb
#8388608        pulse  cov: 6 ft: 15 corp: 6/79b lim: 4096 exec/s: 204600 rss: 36Mb
#16777216       pulse  cov: 6 ft: 15 corp: 6/79b lim: 4096 exec/s: 202135 rss: 36Mb
#33554432       pulse  cov: 6 ft: 15 corp: 6/79b lim: 4096 exec/s: 199728 rss: 36Mb
#67108864       pulse  cov: 6 ft: 15 corp: 6/79b lim: 4096 exec/s: 197961 rss: 36Mb
#134217728      pulse  cov: 6 ft: 15 corp: 6/79b lim: 4096 exec/s: 200624 rss: 36Mb
#268435456      pulse  cov: 6 ft: 15 corp: 6/79b lim: 4096 exec/s: 209388 rss: 37Mb
#536870912      pulse  cov: 6 ft: 15 corp: 6/79b lim: 4096 exec/s: 212790 rss: 37Mb

This is an expected consequence of how ~all fuzzers determine which inputs to mutate 🙂. Libfuzzer (the backing of atheris) saves inputs to mutate - NEW in your log - when they uncover a new line. Unrolling a loop means that every nth iteration is new, and the fuzzer can continue to make incremental progress. With (rolled) loops this can't happen.
I believe libfuzzer does have consideration for high hit counts on loop iterations – ft aka features in your log – but only at large intervals, so the progress is minimal and tails off as the hit count requirement exponentially (?) increases.


updates ruby assets to first koans exercise

@eddiejaoude catching up on github work today by working on Ruby exercises & updating this repo with learnings. Started out with rubymonk.com , moved to Ruby Koans & now doing some exercises from a book "Head First Ruby"- as a bit more visual learning.
Will keep updating PR's as I complete exercises to have notes on what I learn in the sections. Aim for this period is to learn ruby syntax to then be applied to the pottery site.

Nice one @charlottebrf . The first day of your hols and you are powering forward! You are making me look bad 😛 . We will both keep it up over the xmas break 🤓

Thanks @eddiejaoude I think you have nothing to fear! I'm awaiting for @felipesere issues/ praise of the repo ;)
I won't mention you on all PR's as will be super annoying for you! But every now & then so you can keep tabs. Then I will build Charlotte_bot2 💃

@felipesere seems to be enjoying his javascript. Where is Cedric, he loves ruby.
I cant wait for Charlotte_bot2 🤓

😂
On Friday, 23 December 2016, Eddie Jaoude<EMAIL_ADDRESS>wrote:

@felipesere https://github.com/felipesere seems to be enjoying his
javascript. Where is Cedric, he loves ruby.
I cant wait for Charlotte_bot2 🤓
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/charlottebrf/ruby-docs-exercises/pull/4#issuecomment-269003412,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AQGk-MRmNWUpq-5KwOoHWO-AAFKDuBPyks5rK-TbgaJpZM4LU2o3
.

--
Charlotte Fereday
Programmes Manager @codefirstgirls
Tweeting & retweeting @charlottebrf
*Mainly: Tech/Education/Hispanic studies *


domestic government health spending new visualization

Issue created to discuss a new visualization for section one that shows domestic government health spending as a share of total government spending.
Same groupings and time frame as all the other charts. A line chart is fine by me and in the tooltip we can show the amount in total USD and per capita if possible

Sounds good, thanks @nupur-parikh!
Could I please have (here or on the google doc) the text for the chart?
Noted on HICs.

Could I please have (here or on the google doc) the text for the chart?

Header: Government spending on health as a share of total government spending
Chart Text: This chart shows domestic government spending on health as a share of total government spending in different countries and income levels based on World Bank income classifications.
Chart Description: Type a country or income level in the search bar to select several countries at once. Hover over the graph to view additional details.
It is also in the google doc.


fix-#107: Added footer

Summary
This PR adds footer in the homepage.
Description
This PR adds footer in the homepage as it was not added as per the figma file. I created a footer-layout.tsx file and import it at the end of the homepage.
Images

Issue(s) Addressed
#107
Prerequisites

[x] Have you followed all the CONTRIBUTING GUIDELINES?

Couple of observations.

It is not optimized for mobile devices (remember this is tailwind is mobile first framework)
It is visible only in the home-page, it should be every where in the entire app ideally

I have optimized it and made it visible in the entire app.
Plus, I've applied another approach to do it. I've created footer-layout component that can take other components as a 'prop' such as homepage or whatever the page this app require to add footer. This way, whenever we add new pages in the future, we can simply pass them as a prop to the footer layout, and the footer will automatically be added to those pages.

Couple of observations.

It is not optimized for mobile devices (remember this is tailwind is mobile first framework)
It is visible only in the home-page, it should be every where in the entire app ideally

I have optimized it and made it visible in the entire app. Plus, I've applied another approach to do it. I've created footer-layout component that can take other components as a 'prop' such as homepage or whatever the page this app require to add footer. This way, whenever we add new pages in the future, we can simply pass them as a prop to the footer layout, and the footer will automatically be added to those pages.
Eventully this component acts as a wrapper for other components, allowing additional content to be included inside the footer-layout while displaying the copyright information at the bottom.

Thats really nice initiative @Mohitsen11, But I don't think that would make sense to wrap everyone inside the Footer component, the developer experience won't be good, as this is not a standard practice, We ideally just put footer component in the parent component... And we wrap this way only the context ideally. And it is repetative, as in any page I want footer, I should manual wrap it with footer, DX won't be good in my opinion, But I really appreciate the idea and initiative :)
Can we have Footer component at the last in the parent component

Couple of observations.

It is not optimized for mobile devices (remember this is tailwind is mobile first framework)
It is visible only in the home-page, it should be every where in the entire app ideally

I have optimized it and made it visible in the entire app. Plus, I've applied another approach to do it. I've created footer-layout component that can take other components as a 'prop' such as homepage or whatever the page this app require to add footer. This way, whenever we add new pages in the future, we can simply pass them as a prop to the footer layout, and the footer will automatically be added to those pages.
Eventully this component acts as a wrapper for other components, allowing additional content to be included inside the footer-layout while displaying the copyright information at the bottom.

Thats really nice initiative @Mohitsen11, But I don't think that would make sense to wrap everyone inside the Footer component, the developer experience won't be good, as this is not a standard practice, We ideally just put footer component in the parent component... And we wrap this way only the context ideally. And it is repetative, as in any page I want footer, I should manual wrap it with footer, DX won't be good in my opinion, But I really appreciate the idea and initiative :)
Can we have Footer component at the last in the parent component

Yes, we can have.

Couple of observations.

It is not optimized for mobile devices (remember this is tailwind is mobile first framework)
It is visible only in the home-page, it should be every where in the entire app ideally

I have optimized it and made it visible in the entire app. Plus, I've applied another approach to do it. I've created footer-layout component that can take other components as a 'prop' such as homepage or whatever the page this app require to add footer. This way, whenever we add new pages in the future, we can simply pass them as a prop to the footer layout, and the footer will automatically be added to those pages.
Eventully this component acts as a wrapper for other components, allowing additional content to be included inside the footer-layout while displaying the copyright information at the bottom.

Thats really nice initiative @Mohitsen11, But I don't think that would make sense to wrap everyone inside the Footer component, the developer experience won't be good, as this is not a standard practice, We ideally just put footer component in the parent component... And we wrap this way only the context ideally. And it is repetative, as in any page I want footer, I should manual wrap it with footer, DX won't be good in my opinion, But I really appreciate the idea and initiative :)
Can we have Footer component at the last in the parent component

Yes, we can have.

Couple of observations.

It is not optimized for mobile devices (remember this is tailwind is mobile first framework)
It is visible only in the home-page, it should be every where in the entire app ideally

I have optimized it and made it visible in the entire app. Plus, I've applied another approach to do it. I've created footer-layout component that can take other components as a 'prop' such as homepage or whatever the page this app require to add footer. This way, whenever we add new pages in the future, we can simply pass them as a prop to the footer layout, and the footer will automatically be added to those pages.
Eventully this component acts as a wrapper for other components, allowing additional content to be included inside the footer-layout while displaying the copyright information at the bottom.

Thats really nice initiative @Mohitsen11, But I don't think that would make sense to wrap everyone inside the Footer component, the developer experience won't be good, as this is not a standard practice, We ideally just put footer component in the parent component... And we wrap this way only the context ideally. And it is repetative, as in any page I want footer, I should manual wrap it with footer, DX won't be good in my opinion, But I really appreciate the idea and initiative :)
Can we have Footer component at the last in the parent component

Yes, we can have.

I've added footer-layout in the parent level.

Couple of observations.

It is not optimized for mobile devices (remember this is tailwind is mobile first framework)
It is visible only in the home-page, it should be every where in the entire app ideally

I have optimized it and made it visible in the entire app. Plus, I've applied another approach to do it. I've created footer-layout component that can take other components as a 'prop' such as homepage or whatever the page this app require to add footer. This way, whenever we add new pages in the future, we can simply pass them as a prop to the footer layout, and the footer will automatically be added to those pages.
Eventully this component acts as a wrapper for other components, allowing additional content to be included inside the footer-layout while displaying the copyright information at the bottom.

Thats really nice initiative @Mohitsen11, But I don't think that would make sense to wrap everyone inside the Footer component, the developer experience won't be good, as this is not a standard practice, We ideally just put footer component in the parent component... And we wrap this way only the context ideally. And it is repetative, as in any page I want footer, I should manual wrap it with footer, DX won't be good in my opinion, But I really appreciate the idea and initiative :)
Can we have Footer component at the last in the parent component

Yes, we can have.

I've added footer-layout in the parent level.
And added 'key prop' to the categoryPill component to resolve the error.

Error:- Warning: Each child in a list should have a unique "key" prop.

Kindly address the comments

The UI looks good now with the footer layout. I made changes to ensure the footer layout remains controlled as it takes a minimum of 7% of the viewport height. To make it relative to the content height of other components, I adjusted the minimum height of components like add-blog and details-page to 93% of the viewport height.

Kindly address the comments

The UI looks good now with the footer layout. I made changes to ensure the footer layout remains controlled as it takes a minimum of 7% of the viewport height. To make it relative to the content height of other components, I adjusted the minimum height of components like add-blog and details-page to 93% of the viewport height.

Kindly address the comments

The UI looks good now with the footer layout. I made changes to ensure the footer layout remains controlled as it takes a minimum of 7% of the viewport height. To make it relative to the content height of other components, I adjusted the minimum height of components like add-blog and details-page to 93% of the viewport height.

Um UI is still breaking. I just checked.
Try to resolve it.

Kindly address the comments

The UI looks good now with the footer layout. I made changes to ensure the footer layout remains controlled as it takes a minimum of 7% of the viewport height. To make it relative to the content height of other components, I adjusted the minimum height of components like add-blog and details-page to 93% of the viewport height.

Kindly address the comments

The UI looks good now with the footer layout. I made changes to ensure the footer layout remains controlled as it takes a minimum of 7% of the viewport height. To make it relative to the content height of other components, I adjusted the minimum height of components like add-blog and details-page to 93% of the viewport height.

Um UI is still breaking. I just checked. Try to resolve it.

@Mohitsen11 can you leverage flex-1 property, that should ideally solve the issue, min-h-screen looks good to me ...
https://stackoverflow.com/a/75042043/13431819 , see if this helps

@Mohitsen11 can you leverage flex-1 property, that should ideally solve the issue, min-h-screen looks good to me ... https://stackoverflow.com/a/75042043/13431819 , see if this helps

Okay.

@Mohitsen11  Kindly create a bug/issue about "we have to scroll to find the footer even if there is space for the footer in the description, add blog page in both desktop and mobile"
And attach screenshots

Once done, share the ticket here, Will merge this PR

@Mohitsen11 Kindly create a bug/issue about "we have to scroll to find the footer even if there is space for the footer in the description, add blog page in both desktop and mobile" And attach screenshots
Once done, share the ticket here, Will merge this PR

Ticket :- 'https://github.com/krishnaacharyaa/wanderlust/issues/121'


Handle go to location from CommandResponse

Summary
Allows handling the go to location from command responses to go to different parts of the app or open in a browser external apps.
Ticket Link
Fix https://github.com/mattermost/mattermost-plugin-mscalendar/issues/159
Checklist

[ ] Added or updated unit tests (required for all new features)
[ ] Has UI changes
[ ] Includes text changes and localization file updates

Device Information
This PR was tested on:
Android emulator
Screenshots
None

This PR is still missing two key pieces: links to permalinks and links to group messages. It would be great if you could give me some direction on the best way to handle those, and know if the current approach is the correct one.

@larkox I'm about to push a PR either EOD or tomorrow morning with a huge refactor of the post draft, maybe this makes sense to include after the refactor?
Also I see there are a few easy TODO to handle things like permalinks, which I could give you some pointers

@enahum Makes sense for me. Let's wait for the refactor :smile:

getting there

@enahum Heads up that this is already merged with the refactor.

@larkox @lieut-data is this ready to re-review ?

From my side it is ready to review.

@larkox you asked me to review again, but no changes have been applied since my last review.

@larkox ☝

@enahum Thank you for your patience. This should be ready to review now.

@larkox, apologies, but I won't be able to get to this review in the near term.

@larkox sorry was going to review this PR, but can you please resolve the conflicts first ?

@enahum conflict solved.

@larkox
Summary of all failing tests
 FAIL  app/components/post_list/post_list.test.js
  ● PostList › setting channel deep link

    TypeError: Cannot read property 'formatMessage' of undefined

      24 |     let msg = error.message;
      25 |     if (!msg || msg === 'Network request failed') {
    > 26 |         msg = intl.formatMessage(fallback, values);
         |                    ^
      27 |     }
      28 |     Alert.alert('', msg, buttons);
      29 | }

      at alertErrorWithFallback (app/utils/general.js:26:20)
      at errorBadChannel (app/utils/draft.js:110:5)
      at PostList.handleDeepLink (app/components/post_list/post_list.js:191:97)
      at PostList.componentDidUpdate (app/components/post_list/post_list.js:128:18)
      at fn (node_modules/enzyme/src/ShallowWrapper.js:667:26)
      at Object.batchedUpdates (node_modules/enzyme-adapter-react-16/src/ReactSixteenAdapter.js:781:16)
      at fn (node_modules/enzyme/src/ShallowWrapper.js:606:24)
      at withSetStateAllowed (node_modules/enzyme/src/Utils.js:253:3)
      at ShallowWrapper.call (node_modules/enzyme/src/ShallowWrapper.js:592:7)
      at ShallowWrapper.single (node_modules/enzyme/src/ShallowWrapper.js:1654:21)

Test Suites: 1 failed, 244 passed, 245 total
Tests:       1 failed, 2223 passed, 2224 total
Snapshots:   270 passed, 270 total
Time:        173.079 s
Ran all test suites.
npm ERR! Test failed.  See above for more details.

Building app in separate branch.

Successfully building:
https://circleci.com/gh/mattermost/mattermost-mobile/12711
https://circleci.com/gh/mattermost/mattermost-mobile/12709

Artifact links:
https://12711-70265724-gh.circle-artifacts.com/0/tmp/artifacts/Mattermost_Beta.ipa
https://12709-70265724-gh.circle-artifacts.com/0/tmp/artifacts/Mattermost_Beta.apk

@larkox 1.39?

@larkox 1.39?

Cherry pick is scheduled.

Cherry pick is scheduled.

Ticket: https://mattermost.atlassian.net/browse/MM-31662

Ticket: https://mattermost.atlassian.net/browse/MM-31662


Display Label Value instead of metric Value

Hi, Is there a way of displaying the label value instead of metric value
Metric:
fgSysVersion{fgSysVersion="v6.0.9,build0335,200121(GA)",instance="x.x.x.x",job="snmp"}
Result is 1
I want to show just the version in the tooltip.
If I leave the Tooltips "Label" empty, i get this displayed as the tooltip:
fgSysVersion{fgSysVersion="v6.0.9,build0335,200121(GA)",instance="x.x.x.x",job="snmp"}:1
If I change Tooltips Label to Vesion, I get this displayed as the tooltip:
Version: 1
Is there a way I can manipulate the metric name to only show  "v6.0.9,build0335,200121(GA)" in the tooltip.
maybe a regex to only show certain parts of the label?

Maybe with text replace in event, you can use a javascript expresssion like
${_value}.split('"')[2]

The Rule is set as follows:
Prometheus metric result:
fgSysVersion{fgSysVersion="v6.0.9,build0335,200121(GA)",instance="x.x.x.x",job="snmp"}
Result is 1
Rule Name: VersionDetails
Apply To Metrics: fgSysV.instance="x.x.x.x".}
Type: String
Display Metrics: Yes
Label: Auto
This shows:

I would like to have this show as:
Version: v6.0.9,build0335,200121(GA)
Av:16.00560(2012-10-19 08:31)
and so on....
Thanks @algenty, do you mean that i should put this in the Value mapping field:
Value = 1
Text = ${_value}.split('"')[1]

I tried this above but it doesn't show the desired result.

for that matter it doesnt translate the $(_value). Am i doing something wrong ?

Not in mapping, try it in event with "replace text event"
You need to construct your metric to return the version.
It's also a possible evolution for next version to add a new variable like ${_metric}


Working with React 0.13.x

Hi there!
This is maybe more a question than an issue, but :
I can make coffee-reactify work nicely with react 0.12.1 coffee-script, browserify, coffeeify, and coffee-react-transform.
However I can't get this set-up to work with react 0.13.x.
I can update my react code and it will compile the build properly but I then I get the following js error :
Error: Invariant Violation: React.render(): Invalid component element.

Would coffee-rectify and react 0.13.x be supposed to work together ?
Any clue where is that error coming from ?
Any clue where I need to look / where to start if I want to fork and update coffee-reactify to work with the latest version of react ?
Any alternative ?

Thank you!

Ok my bad, this was due to how I was rendering component in my application; there is some differences on how it's handle between 0.12.1 and 0.13.1.
However @jsdf  you should probably update version in README.md , this might be misleading :)


Can sigma display a graph directly from a Graphology object?

Right now Sigma can display a graph from a JSON file. Is there a plugin that can display a graph if Sigma receives a graphology object? Is there a plan to implement that?

Hello @deemeetree, the v2 currently in development has been built so that graphology is now representing a sigma renderer's graph data so it is possible out-of-the-box so to speak. Regarding the v1 there is no plan to implement that currently but it should not be too complicated to convert a graphology instance JSON output (using #.export or #.toJSON) to the format sigma v1 expects.

Hello @Yomguithereal  thank you for your response! You're talking about Sigma V2, right? Do you have any roadmap for when it's going to be out? Is there already a useable unreleased version to try out? Thanks!

It should be released soonish. But it's already used by some people in production already. But you take the risk on relying on APIs that will break. Check out the v2 branch and especially the examples folder.

V2 has been released !


Can't download exercises

Hi I've been doing the Java Programming 2 course on intellij; I formatted my laptop as it was giving me issues. On the reinstallation of IntelliJ the TMC plugin allows me to log in and choose the exercises I want to download, however they don't download at all.
Does anybody else have this issue or a solution to it?
Here is the error that the IDE gives me after I attempt to download the exercises
TMC error.txt

Solved it, seems like the newer version of IntelliJ wasn't compatible with this plugin so I download one of their releases from July 2023


add -P prefix to invoke params in br reference/example

prefix was missing from docs

Thanks @johnmccabe - merging.


⚠ ClamAV has degraded performance

In 3fd1153, ClamAV (https://spamassassin.apache.org/) experienced degraded performance:

HTTP code: 200
Response time: 409 ms

Resolved: ClamAV performance has improved in bf08186.


Calling parallel process() for a very large file gets stuck

I'm able to use the parallel process() function for medium sized files without problem (on Summit), but when I tried to process a 112GB file with 32,925 traces, the program will always get stuck. I've tried different node configurations (1 node 6 CPUs, 1 node 42 CPUs, 2 nodes 84 CPUs, etc.) but none of them worked. I was wondering if this related to #32 and is there any workaround to this problem?
Below is the full debug info.
Launching processing using MPI on 6 processors.
MASTER   received from WORKER 2 [WORKER_REQUESTS_ITEM] -- None
WORKER 2 sent to       MASTER   [WORKER_REQUESTS_ITEM] -- None
WORKER 1 sent to       MASTER   [WORKER_REQUESTS_ITEM] -- None
WORKER 5 sent to       MASTER   [WORKER_REQUESTS_ITEM] -- None
WORKER 4 sent to       MASTER   [WORKER_REQUESTS_ITEM] -- None
WORKER 3 sent to       MASTER   [WORKER_REQUESTS_ITEM] -- None
MASTER   sent to       WORKER 2 [MASTER_SENDS_ITEM] -- ('1A.CORRE', 'synthetic')
WORKER 2 received from MASTER   [MASTER_SENDS_ITEM] -- ('1A.CORRE', 'synthetic')
MASTER   received from WORKER 3 [WORKER_REQUESTS_ITEM] -- None
MASTER   sent to       WORKER 3 [MASTER_SENDS_ITEM] -- ('1A.NE00', 'synthetic')
MASTER   received from WORKER 4 [WORKER_REQUESTS_ITEM] -- None
MASTER   sent to       WORKER 4 [MASTER_SENDS_ITEM] -- ('1A.NE01', 'synthetic')
WORKER 3 received from MASTER   [MASTER_SENDS_ITEM] -- ('1A.NE00', 'synthetic')
RT Inventory created at 1995-06-29T12:22:32.070000Z
Created by: SPECFEM3D_GLOBE/asdf-library
http://seismic-data.org
Sending institution: SPECFEM3D_GLOBE
Contains:
Networks (1):
1A
Stations (1):
1A.CORRE (N/A)
Channels (3):
1A.CORRE.S3.MXZ, 1A.CORRE.S3.MXN, 1A.CORRE.S3.MXE
WORKER 4 received from MASTER   [MASTER_SENDS_ITEM] -- ('1A.NE01', 'synthetic')
MASTER   received from WORKER 5 [WORKER_REQUESTS_ITEM] -- None
MASTER   sent to       WORKER 5 [MASTER_SENDS_ITEM] -- ('1A.NE02', 'synthetic')
WORKER 5 received from MASTER   [MASTER_SENDS_ITEM] -- ('1A.NE02', 'synthetic')
MASTER   received from WORKER 1 [WORKER_REQUESTS_ITEM] -- None
MASTER   sent to       WORKER 1 [MASTER_SENDS_ITEM] -- ('1A.NE03', 'synthetic')
WORKER 1 received from MASTER   [MASTER_SENDS_ITEM] -- ('1A.NE03', 'synthetic')
WORKER 2 sent to       MASTER   [WORKER_REQUESTS_ITEM] -- None
MASTER   received from WORKER 2 [WORKER_REQUESTS_ITEM] -- None
MASTER   sent to       WORKER 2 [MASTER_SENDS_ITEM] -- ('1A.NE04', 'synthetic')
WORKER 2 received from MASTER   [MASTER_SENDS_ITEM] -- ('1A.NE04', 'synthetic')

Is that the full output? Unfortunately it does not provide enough information for me to understand what is going on and at that scale I cannot easily reproduce it. It would be great if you could investigate the problem a bit and tell me what you find but I understand that this is not easy.
What should also work is to just disable MPI for pyasdf - this would fall back to using the multiprocessing module of Python. It should scale decently well to a full node and it uses a round robin method to organize actually writing to the file on disc.
To do this simply create the ASDFDataSet object with pyasdf.ASDFDataSet(..., mpi=False). Then in your batch submission file (I don't know which queuing system Summit uses) make sure to submit the job in a way that it does not use mpiexec/mpirun (or if you use it use a single rank) but still make sure that it has access to a full node. pyasdf should then just take all cores of a node and process the data with it. This will not work for more than one node!

Yes this is the full output. I'll try to investigate more on this, thanks.

That would be great - thanks!
I don't really understand why the inventory is printed in the above output, otherwise - if sorted by worker - it is fine (in the current pyasdf implementation rank 0 is always the MASTER and all workers [all other ranks] can request new stations to process:
Worker 1
WORKER 1 sent to MASTER [WORKER_REQUESTS_ITEM] -- None
MASTER received from WORKER 1 [WORKER_REQUESTS_ITEM] -- None
MASTER sent to WORKER 1 [MASTER_SENDS_ITEM] -- ('1A.NE03', 'synthetic')
WORKER 1 received from MASTER [MASTER_SENDS_ITEM] -- ('1A.NE03', 'synthetic')

Worker 2
MASTER received from WORKER 2 [WORKER_REQUESTS_ITEM] -- None
WORKER 2 sent to MASTER [WORKER_REQUESTS_ITEM] -- None
MASTER sent to WORKER 2 [MASTER_SENDS_ITEM] -- ('1A.CORRE', 'synthetic')
WORKER 2 received from MASTER [MASTER_SENDS_ITEM] -- ('1A.CORRE', 'synthetic')

WORKER 2 sent to MASTER [WORKER_REQUESTS_ITEM] -- None
MASTER received from WORKER 2 [WORKER_REQUESTS_ITEM] -- None
MASTER sent to WORKER 2 [MASTER_SENDS_ITEM] -- ('1A.NE04', 'synthetic')
WORKER 2 received from MASTER [MASTER_SENDS_ITEM] -- ('1A.NE04', 'synthetic')

Worker 3
WORKER 3 sent to MASTER [WORKER_REQUESTS_ITEM] -- None
MASTER received from WORKER 3 [WORKER_REQUESTS_ITEM] -- None
MASTER sent to WORKER 3 [MASTER_SENDS_ITEM] -- ('1A.NE00', 'synthetic')
WORKER 3 received from MASTER [MASTER_SENDS_ITEM] -- ('1A.NE00', 'synthetic')

Worker 4
WORKER 4 sent to MASTER [WORKER_REQUESTS_ITEM] -- None
MASTER received from WORKER 4 [WORKER_REQUESTS_ITEM] -- None
MASTER sent to WORKER 4 [MASTER_SENDS_ITEM] -- ('1A.NE01', 'synthetic')
WORKER 4 received from MASTER [MASTER_SENDS_ITEM] -- ('1A.NE01', 'synthetic')

Worker 5
WORKER 5 sent to MASTER [WORKER_REQUESTS_ITEM] -- None
MASTER received from WORKER 5 [WORKER_REQUESTS_ITEM] -- None
MASTER sent to WORKER 5 [MASTER_SENDS_ITEM] -- ('1A.NE02', 'synthetic')
WORKER 5 received from MASTER [MASTER_SENDS_ITEM] -- ('1A.NE02', 'synthetic')

Hi Lion, I found that the process() function will stuck when calling station_group.copy() during the creation of the new dataset (line 2111). When I remove station_group.copy(), the function will work fine. Do you have any idea what the problem is?

Can you try replacing
station_group.copy(
    source=data, dest=group, name="StationXML"
)

with
group["StationXML"] = data[:]

This might be a bit less efficient but I doubt it matters and if it works it is the better solution. Also make sure to check the StationXML files in the result in case it work.

Can you try replacing
station_group.copy(
    source=data, dest=group, name="StationXML"
)

with
group["StationXML"] = data[:]

This might be a bit less efficient but I doubt it matters and if it works it is the better solution. Also make sure to check the StationXML files in the result in case it work.

Yes this is working. The StationXML in the result also seems fine.

Perfect :-)
Fixed in 08419cf743ad8a0d61f0599919f8e6ea9650486c and I also just released 0.7.3 that contains the fix. It is already out on pypi and will be on conda-forge in a bit.
Thanks for your help with this!


Fix capacity and energy integrators

This is the same approach devised by @WardLT, but with two minor modifications:

re-formulating the definition of max_charge and max_discharge to conform to the standard of reporting currents: negative current <=> discharge /// positive current <=> charge.
switching from cumulative_simpson to cumtrapz integrator for enhanced stability with noisy battery data.

Thanks, @victorventuri ! We also need up to update the charge conventions in the "extractors" too, and I'll get started on that


OSSM-5416 Building multi-platform container image

@jwendell checking

/retest

/retest

Hey, after latest changes it's working on a cluster bot arm cluster but it was not possible to run it locally on my macOS, this is because TARGETOS is being set to the local OS which is darwin. I still need to do some small changes to be able to set the test job to be able to run against arm cluster. But I'll do it when this PR is merged

Hi, does that multi arch build work in CI ?
I thought the docker buildx is based on the OS arch. So in theory, our CI node has only x86(amd64) arch and then we can only build amd64 images in CI.

Hi, does that multi arch build work in CI ? I thought the docker buildx is based on the OS arch. So in theory, our CI node has only x86(amd64) arch and then we can only build amd64 images in CI.

I'm changing the integration test to docker-buildx and right now it's failing: https://github.com/maistra/istio-operator/pull/1528. I'm checking the logs

Hi, does that multi arch build work in CI ? I thought the docker buildx is based on the OS arch. So in theory, our CI node has only x86(amd64) arch and then we can only build amd64 images in CI.

I'm changing the integration test to docker-buildx and right now it's failing: #1528. I'm checking the logs

Related this, it can't be tested until this PR is merged. I tested yesterday locally against an arm cluster an was working the test but on my local machine was not possible because of the TARGETOS as I mentioned before

Hi, does that multi arch build work in CI ? I thought the docker buildx is based on the OS arch. So in theory, our CI node has only x86(amd64) arch and then we can only build amd64 images in CI.

@yxun the build is not based on the host OS arch. The process is first to build the manager binaries for all architectures (with go build ...) and then docker buildx creates the container image which includes a docker manifest for each architecture. For example, the 3.0-latest tag of this image here has 4 manifests (linux on arm64, linux on amd64, linux on s390x and linux on ppc64le) so it could run on these specific arch.

/retest

After some fights with my local configuration, I was able to run: make BUILD_WITH_CONTAINER=1 HUB=quay.io/frherrer docker-buildx with success build and pushing for all the arch the operator image:
 => => pushing layers                                                                                15.6s
 => => pushing manifest for quay.io/frherrer/istio-operator:3.0-latest@sha256:794cfb5b2330295be1295c794f0a99691a341834cbd15796c0d30a33e8aa0a0c                                                                                5.6s
 => [auth] frherrer/istio-operator:pull,push token for quay.io

pushing the images for all these configurations: --platform=linux/arm64,linux/amd64,linux/s390x,linux/ppc64le
I tested by running the image using the integration test and the operator install without any error in the ARM cluster


Clarification needed

Hi,
I have a problem with making conform to work with my Phoenix application.
I would like to have possibility to control port that Phoenix should use from env variable.
I have added conform into my mix.exs, I have run mix conform.new and mix conform.configure. I had run them with preceding MIX_ENV=prod to make it work.
Then was the part that was a bit difficult for me probably because I didn't understand something.
Anyhow I couldn't make it work.
Finally I copied app.conf and app.schema.exs into /app/rel/app/releases/0.0.1.
However when I tried to run my application it complained about missing conform file in the bin dir.
I have downloaded this file and copied it into bin dir.
Now it works as I expected.
PORT=1212 app console => server is started on port 1212
app console => server is started on random port (cowboy in Phoenix selects port itself.)
But I feel this is not proper and final solution and rather workaround. Could you please give me a little bit of clarification of things needed to make it work in a proper/nice way?
Thanks a lot.

Are you using distillery or exrm? If the latter, then you need to also include conform_exrm in your dependencies.

I am using exrm. I'll try with conform_exrm.
I'll try with Distillery as well.

Would definitely recommend using Distillery if you have a choice - there is very little needed to migrate from exrm, and I'm no longer supporting exrm in any active capacity (I still merge PRs and the like, but those are few and far between these days).


Add package for formatting package.json

We don't have a standardized way to format our package.json' contents, which can lead to nits related to it. We should add a package and call it in pnpm lint. Perhaps https://www.npmjs.com/package/sort-package-json.

No, this should be a manual thing. Alphabetical sorting has nothing to do with what originated this issue and would de-prioritize everything, probably resulting in a very unpleasant package.json file.

Idk, at first glance prettier-package-json does the job pleasantly. They keep pre- and post- prefixes around the command they prefix, which is very nice.

Considering it's not alphabetical (bad assumption on my part) and you are fond of it, it may be worth the shot.
It just looks like a low-priority chore when compared to other pressing issues we have around. No big deal.

Yes, it's a low prio chore that should be documented as such. I created priority labels for our issues and added one to it.


Feature/gh 6575

fixes GH-6575

When merging, please use correct commit message (eg. fix: something something)