Support for newrelic-log-ingestion-0356e24a3f87 naming format

Unable to Deploy Serverless Application due to NewRelic Log Ingestion Function Naming Pattern Issue
Description
When deploying a serverless application using the serverless-newrelic-lambda-layers plugin, the deployment process fails to recognize the newrelic-log-ingestion function due to a change in the naming pattern introduced by newrelic-lambda-cli. The plugin expects a function named newrelic-log-ingestion, but the CLI now creates functions with a naming pattern like newrelic-log-ingestion-0356e24a3f87, which is not recognized by the plugin. This results in an error during the deployment process, as the plugin is unable to find the required log ingestion function. It also cannot create a new log ingestion function due to the existing CloudFormation stack created by the newrelic-lambda-cli.
Steps to Reproduce

Ensure the newrelic-lambda-cli has been used to set up New Relic monitoring, which creates a newrelic-log-ingestion function with the new naming pattern.
Use the serverless-newrelic-lambda-layers plugin in a Serverless Framework project.
Run sls deploy --verbose to deploy the application.

Expected Behavior
The serverless-newrelic-lambda-layers plugin should successfully recognize the newrelic-log-ingestion function created by newrelic-lambda-cli, regardless of the naming pattern, and proceed with the deployment without errors.
Actual Behavior
The deployment process fails with the following error message:
✖ Could not find a newrelic-log-ingestion function installed.
✖ Function not found: arn:aws:lambda:us-west-2:123456789123:function:newrelic-log-ingestion creating required newrelic-log-ingestion function in region us-west-2
✖ Unable to get stack information.
✖ { ServerlessError: Stack [NewRelicLogIngestion] already exists and cannot be created again with the changeSet [NewRelicLogIngestion-CREATE-1234567891234]. ... (additional error output) } Warning: Unable to create newrelic-log-ingestion function. Please verify that required environment variables have been set.

The error indicates that the plugin is attempting to create a new newrelic-log-ingestion function, despite one already existing with the new naming pattern.
Additional Information

Serverless Framework Version: 3.38.0
Serverless-NewRelic-Lambda-Layers Plugin Version: 3.5.0
NewRelic-Lambda-CLI Version: 0.8.0
Operating System: Linux

Possible Solution
The serverless-newrelic-lambda-layers plugin needs to be updated to recognize the new naming pattern used by the newrelic-lambda-cli when searching for existing newrelic-log-ingestion functions.

Serverless Framework Deployment Fails Despite Successful NewRelicLogIngestion Stack Creation
Description
After resolving a previous issue with an old CloudFormation stack, the serverless-newrelic-lambda-layers plugin successfully creates a NewRelicLogIngestion CloudFormation stack. However, the Serverless Framework deployment still fails, reporting that it cannot find the newrelic-log-ingestion function and incorrectly validating the changeSet.
Steps to Reproduce

Delete any existing CloudFormation stacks that might conflict with the New Relic setup.
Run sls deploy --verbose to deploy the serverless application with the serverless-newrelic-lambda-layers plugin.

Expected Behavior
The Serverless Framework should recognize the successfully created NewRelicLogIngestion CloudFormation stack and complete the deployment without errors.
Actual Behavior
The Serverless Framework deployment fails with the following output:
✖ Could not find a newrelic-log-ingestion function installed.
✖ Function not found: arn:aws:lambda:us-west-2:123456789123:function:newrelic-log-ingestion ...
✖ Unable to get stack information. ✖ { ServerlessError: Stack [NewRelicLogIngestion] already exists and cannot be created again with the changeSet [NewRelicLogIngestion-CREATE-1234567891234]. ... (additional error output) }
Warning: Unable to create newrelic-log-ingestion function. Please verify that required environment variables have been set.

The error suggests that the Serverless Framework is attempting to validate a changeSet that is different from the one actually created by the CloudFormation stack.
Additional Information
Stack Trace:
✖ Could not find a `newrelic-log-ingestion` function installed.
Warning: Details about setup requirements are available here: https://docs.newrelic.com/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/enable-new-relic-monitoring-aws-lambda#enable-process
✖ Function not found: arn:aws:lambda:us-west-2:123456789123:function:newrelic-log-ingestion
creating required newrelic-log-ingestion function in region us-west-2
✖ Unable to get stack information.
✖ { ServerlessError: Stack [NewRelicLogIngestion] already exists and cannot be created again with the changeSet [NewRelicLogIngestion-CREATE-123456789123].
      at /home/kmullaney/repos/examples/lambda/main/java/node_modules/serverless/lib/aws/request.js:221:11
      at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
      at async persistentRequest (/home/kmullaney/repos/examples/lambda/main/java/node_modules/serverless/lib/aws/request.js:145:14)
    code: 'AWS_CLOUD_FORMATION_CREATE_CHANGE_SET_VALIDATION_ERROR',
    decoratedMessage: undefined,
    providerError:
     { Error [ValidationError]: Stack [NewRelicLogIngestion] already exists and cannot be created again with the changeSet [NewRelicLogIngestion-CREATE-123456789123].
         at Request.extractError (/home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/protocol/query.js:50:29)
         at Request.callListeners (/home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
         at Request.emit (/home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
         at Request.emit (/home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/request.js:686:14)
         at Request.transition (/home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/request.js:22:10)
         at AcceptorStateMachine.runTo (/home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/state_machine.js:14:12)
         at /home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/state_machine.js:26:10
         at Request.<anonymous> (/home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/request.js:38:9)
         at Request.<anonymous> (/home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/request.js:688:12)
         at Request.callListeners (/home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/sequential_executor.js:116:18)
         at Request.emit (/home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
         at Request.emit (/home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/request.js:686:14)
         at Request.transition (/home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/request.js:22:10)
         at AcceptorStateMachine.runTo (/home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/state_machine.js:14:12)
         at /home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/state_machine.js:26:10
         at Request.<anonymous> (/home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/request.js:38:9)
         at Request.<anonymous> (/home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/request.js:688:12)
         at Request.callListeners (/home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/sequential_executor.js:116:18)
         at callNextListener (/home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/sequential_executor.js:96:12)
         at IncomingMessage.onEnd (/home/kmullaney/repos/examples/lambda/main/java/node_modules/aws-sdk/lib/event_listeners.js:417:13)
         at IncomingMessage.emit (node:events:531:35)
         at IncomingMessage.emit (node:domain:488:12)
         at endReadableNT (node:internal/streams/readable:1696:12)
         at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
       code: 'ValidationError',
       time: 2024-01-20T03:52:57.928Z,
       requestId: '25aa44bd-494b-4344-b43b-b50ab62e06c3',
       statusCode: 400,
       retryable: false,
       retryDelay: 59.42190121235369 },
    providerErrorCodeExtension: 'VALIDATION_ERROR' }

Possible Solution
The serverless-newrelic-lambda-layers plugin may need to be updated to correctly validate the existing CloudFormation stack and its changeSet, or to properly handle the case where the NewRelicLogIngestion stack has already been created. Additionally, ensuring that the plugin can find the newrelic-log-ingestion function after it has been created might resolve the error.
Notes
It's looking to validate a changeSet like NewRelicLogIngestion-CREATE-123456789123, but the actual changeSet that was created successfully has a different series of digits on the end.

@keegoid-nr This is in the release pipeline with v5.0.1. Thank you for reporting!


Added snakefmt and dry run tests documentation

Hey @gwaygenomics
This pull request focuses on resolving #4.
Updated readme file by adding documentation about the snakefmt code formatter and snakemake's dry run.

Hey @gwaygenomics
All suggestions have been attended!
Commit regarding to the readme update: https://github.com/WayScience/CytoPipe/pull/5/commits/7564f7a4b657c4dd35ce6e0d8705d305845f0926


Add disposedbeforeasyncrunanalyzer

We haven't got round to putting the analysers into the build pipeline for the service where this arose (I did one pass of fixing the analyser warnings, but I didn't merge the PR to add the analysers). I'm happy for us to get this into main and then enable the analysers on the pipeline and see in prod.

It occurs to me that this (from my above comment) is a good test case for when the analyser should not trigger:
let asyncReturningFunc () =
    do
        use t1 = new blah
        use t2 = new blah
        ()
    async {
        ...
    }

In this case, it's clear and explicit that the disposables are disposed before the async is returned, let alone before it's run.

It occurs to me that this (from my above comment) is a good test case for when the analyser should not trigger:

Thanks, I added the use inside a do as another negative test. The let was already covered in another negative test.


Auto complete input

Ionic version:  (check one with "x")
(For Ionic 1.x issues, please use https://github.com/ionic-team/ionic-v1)
[ ] 2.x
[x] 3.x
[ ] 4.x
I'm submitting a ...  (check one with "x")
[ ] bug report
[x] feature request
Is there a way to generate an autocomplete input field in version 3? This would be a very convenient add on..

Hello! Thank you for the feature request. This feature request already exists as https://github.com/ionic-team/ionic-feature-requests/issues/281 (private repo). We are continually prioritizing all requests that we receive with outstanding issues. We are extremely grateful for your feedback, but it may not always be our next priority. I'll copy the issue back to this repository when we have begun implementation. Thanks!


Test click

Issue:
What I did
How to test

[ ] Is this testable with Jest or Chromatic screenshots?
[ ] Does this need a new example in the kitchen sink apps?
[ ] Does this need an update to the documentation?

If your answer is yes to any of these, please make sure to include it in your PR.

no ci set up...


Add “invite me” in corobo help

The “corobo help” command should list “invite me” too with a proper description.
Label: initiatives/gci

Note the help is found associated with the invite_cmd in labhub.py , in the re_cmd_name_help

Hello, I would really like to work on this. If possible can I be assigned this task?

Also, I was going through the script labhub.py and for the invite_cmd method, I see that the regex can match to "invite @userto developers" while match.group(1) will return "user" (instead of "userto"). I guess this wouldn't affect the functionality much, but might just be a corner-case error? If possible, could I work on this and #307?

Please file a new issue, such discussions shouldn't clutter unrelated issues ;)


mj-image size limited to 550px

Hey there,
Edit
Maybe this is a reference to #151 or #71 as they sounded similar.
I wanted to widen the mj-body to our desired desktop size of 820px. After doing so everything adjusted just fine, but not the images. After inspecting their table-structured HTML markup I saw, that the parent td element has a fixed with of 550px. Which is odd as I can't find any reference to this in the code. Is this a default setting of MJML or am I missing something?
Here is the rendered HTML of the editor:

Cheers
Toby

Do you see a difference of behavior if you drop the mjml code into https://mjml.io/try-it-live ?

Dropping the MJML code into the live editor at mjml.io the image acts as expected spanning the whole width.
The parent td of the image gets a fixed with of 770px which is fine.

could you provide a minimal reproduction (mjml-code) of what you are using?

Funny enough, the problem only occurs in the grapesjs editor. Once I generate the HTML, I get the correct values and the images are spanning the full width.
Here is a stripped down version of my mjml code.
<mjml>
  <mj-body width="820px">
    <mj-section>
      <mj-column>
        <mj-text font-size="9px" color="#000000">{TRACKER_IMAGE}</mj-text>
      </mj-column>
    </mj-section>
    <mj-section>
      <mj-column>
        <mj-text>Insert text here</mj-text>
      </mj-column>
    </mj-section>
    <mj-section>
      <mj-column>
        <mj-image src="https://via.placeholder.com/920x90?text=Should be full width"></mj-image>
      </mj-column>
    </mj-section>
  </mj-body>
</mjml>

@DRoet Don't want to get on anyones nerves, but I need the images to be sized correctly in the editor as they are displayed in the final email, as our clients are not that technically affine.
Any progress or a guess, where this problem is coming from? Thanks in advance!

Could you try this in https://github.com/artf/grapesjs-mjml/releases/tag/v0.2.9
I'm not sure if my patch is optimal, but it seems to do the job

That seems to to the job, I'am closing this for now.
Thanks!


silencer "recreate" does not remember matching with "regex"

Bug Report
What did you do?
receate an expired "silencer" with matching of 'regex'
What did you expect to see?
the to be created new silencer have all the properties derived from the old one, including the checked 'regex'
What did you see instead? Under which circumstances?
the 'regex' checkbox is cleared within the matching rule
Environment

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

Prometheus version:
2.3.2

Alertmanager version:
not relevant

Prometheus configuration file:

insert configuration here

Alertmanager configuration file:

insert configuration here (if relevant to the issue)

Logs:

insert Prometheus and Alertmanager logs relevant to the issue here

Thanks for filling the issue! Can you copy the information to https://github.com/prometheus/alertmanager/issues/new instead?

sure, my bad.


Is it possible to document dictionary schema?

I am curious if it is possible to make documentation showing the "types" of a dictionary variable.
Consider the following two cases:

I have a variable in my package:#let themes = (
    light: "light",
    dark: "dark"
)

I have a function that returns a dictionary of entries. This might look like: #let return-value = (
   name: "Mocha",
   emoji: "🌿",
   order: 3,
   dark: true,
   light: false,
   colors: (
     rosewater: (
       name: "Rosewater",
       order: 0,
       hex: "#f5e0dc",
       rgb: rgb(245, 224, 220),
       accent: true,
     ),
 	flamingo: (...),
 	pink: (...),
 	...
   ),
 )

In my documentation, I want to have a result that looks something like:

Thistheme = (
	light: string,
	dark: string,
)

Or thisreturn-value = (
  name: string,
  emoji: string,
  order: integer,
  dark: boolean,
  light: boolean,
  colors: dict(
    key: (
      name: string,
      order: integer,
      hex: string,
      rgb: color,
      accent: boolean,
    )
  ),
)

The second case is a bit more difficult since it has a nested schema. I was originally going to do this manually, but using - name (type): desc notation expects it to be documentation related to arguments, rather than just general text.
Edit:
For additional demonstration, this is how I am currently doing things:
/// Get the color palette for the given theme.
/// ==== Schema
/// - name (```typ string```): The name of the flavor (e.g. Frappé)
/// - emoji (```typ string```): The emoji associated with the flavor.
/// - order (```typ integer```): The order of the flavor in the Catppuccin lineup.
/// - dark (```typ boolean```): Whether the flavor is a dark theme.
/// - light (```typ boolean```): Whether the flavor is a light theme.
/// - colors (```typ dictionary```): A dictionary of colors used in the flavor. Keys are the color names as a ```typ string``` and values are dictionaries with the following keys:
///   - name (```typ string```): The name of the color.
///   - order (```typ integer```): The order of the color in the palette.
///   - hex (```typ string```): The hex value of the color.
///   - rgb (```typ string```): The RGB value of the color.
///   - accent (```typ boolean```): Whether the color is an accent color.
///
/// ==== Example
/// \<removed for brevity\>
///
/// - theme (string): The theme to get the palette for. The dict @@themes can be used to simplify this.
/// -> dictionary
#let get_palette(theme) = { ... }

This ends up looking like this (ignore the applied theming):

Hello @TimeTravelPenguin ,
I am not sure if I understand correctly what you want to do. Should the the types be inferred automatically? Or do you just want to add information about the dictionary structure manually and the issue is about the formatting?

Note that you can put another space before the list items to prevent them being recognized as parameter documentation
/// Description
///  - name (string): The name of the flavour // not recognized as a parameter
///
/// - theme (string): ...  // recognized as a parameter

Closing for now due to lack of response. Fell free to re-open this though!


[FEATURE REQ] Add option to disable intermediate Flushes in OpenWrite

Users migrating from V11 notice performance degradation when using OpenWrite API.
The behavior change is that V12 write stream has operational Flush, so if stream is used in a context that frequently flushes that generates more requests to the service.
We should consider adding an option to disable intermittent flush.
Related:
https://github.com/Azure/azure-sdk-for-net/issues/22462
https://github.com/Azure/azure-sdk-for-net/issues/20652

This was opened in response to an email. Filing it here for tracking


How to install

how to install in docker.
can explain in more detail

Did you see the README (For Docker)?
If yes, then what problem are you facing?


build: automate requirements installation and use venv to install requirements only locally

This simply takes one step away from the build process.

Ah.  It seems to break the netlify build (for some reason, setting up a virtualenv in netlify is broken).  I can investigate but wouldn't want to put too much time to this :/

I'd be super happy to have this moved to the README so that people could choose to use it, or if they wanted to do something different on their setup, or it's being used by netlify then the makefile doesn't make assumptions but the instructions are right there if needed.

I'm abandoning this but additional instructions for the README would be welcome (let's leave the build alone since Netlify does this its own way)


Find better solution for opening developer console

The current methods for opening the developer console may not work anymore on future versions of Android/iOS. They are already hard to find intuitively and execute. So we need a better, more obvious cross-platform solution that works on all kind of devices and on emulators.

One relatively obvious way would be to have a browser-like toolbar above/below the app area, but then you can't see how the app layout would work in production.
Second option would be to put something in the notification area of the device that can be tapped to open the console, but that would still be hard to find and annoying to execute.
Third option i can think of is to have a kind of tab/flag sticking in from the right (where the console opens from) overlaying the actual app. You can touch this and swipe left to open the console, basically like before but with more area to grab on to. Of course the would overlap the actual app and could get in the way. To eliviate that I would suggest to a) make it semi-transparent, and b) make it possible to slide it up/down to move it out of the way. Here's a rough draft of what this thing could look like:

Firstly, I would ask to let the developers decide for themselves how to open the console, as requested here: https://github.com/eclipsesource/tabris-js/issues/1696
Secondly, could I offer my way? As for me, nothing better than FAB I have not seen yet. One button in the bottom right corner of the device

Something like
new ImageView({ cornerRadius: 50 / 2, width: 50, height: 50, padding: 15, background: 'white', elevation: 3, highlightOnTouch: true, image: 'https://i.imgur.com/WnF4T4w.png', right: 25, bottom: 25 })
    .appendTo(contentView);

Not very iOS-like but decent idea nevertheless.

@fax1ty Wouldn't the FAB conflict with the user's app?

@cookieguru,
Any component that will be placed above the contentView will somehow be able to conflict with the design of the users. At least the FAB is designed to be located in the most convenient place to press. Very little useful content (with a tap listener) is located in the bottom right corner.
One more time... You can leave everything as it is, just give developers the opportunity to open the console through the code and they will decide how it will be more convenient for them

@fax1ty I don't understand.  The link you provided advocates that developers use a FAB for the primary interaction on a screen, and you're saying that it's an unused area.  The flagship Google apps certainly use this design pattern and it is definitely becoming more prevalent amongst other apps.  So if the developer's app has a FAB and this FAB is right on top of it there are surely going to be some problems.
Of course a middle right button can cause conflicts, but certainly less than a bottom right.

@cookieguru
I agree, if someone makes his FAB, it will lead to conflict. Just like with any other UI component.
By the way, I still thought how it is possible to make not using UI. How about adding a listener to device shaking? I think it's pretty convenient. Shook the phone and opened the console.

Another viable approach would be a full bar which is always visible. similar to the top bar in the current navigation drawer. It will make it easy to discover and is always in reach. It will take away app screen space but that should not be a problem, since you should not rely on any particular dimension anyways.

We opted for an implementation with a persistent toolbar at the bottom.

A similar implementation has been created for iOS.

@mpost
I finally came face to face with the new Dev Tools. My little review:

There is a bug on Android (keyboardAppearanceMode is not set inside TextInput on top) that causes the keyboard to open endlessly.
When you restart (refresh the code) of the application, the top panel opens up again, even if it was closed
You cannot close the dev tools panel, but leave the console available. It is very inconvenient to have an unclosed (almost) panel on top that takes up 1/5 of your screen. Please make a way to use only the console

Thanks for your feedback. Could you describe how to reproduce the issue you mentioned step by step?

@mpost Just open any builded app


Functional test and fix for MongoDB

As reported to me by Ask, fixing the formerly unit tests and cleanly closing the connection.

On 4 Feb 2012, at 05:09, Scott Lyons wrote:

As reported to me by Ask, fixing the formerly unit tests and cleanly closing the connection.

Awesome!  I just tried it with celery and it works well.
(though i noticed that 'celeryctl -b mongodb://' doesn't
work, but '-b mongodb://localhost' did for some reason, so that's another
bug I guess).
Also the functional tests are passing for me, but I had to upgrade
to pymongo2, because 1.11 did not have Cursor.close.  So it should
probably add a version requirement.
I'll release kombu 2.1.0 now,
thanks for the help!
--
Ask Solem
twitter.com/asksol | +44 (0)7713357179


Sort the files relating to a smart answer

This means that the return value of this method is no longer dependant
on the ordering on the underlying file system. Therefore, this helps
any functionality using all_paths or anything derived from it be more
deterministic.
The motivation for this change is the checksum generation output, as
with this change, the order of the files in the generated yaml file is
deterministic.

From talking to @ikennaokpala, I've realised that this isn't just a nicety, but important for doing development of Smart Answers on a file system that does not guarantee a consistent order for file traversal.

I've put up https://github.com/alphagov/smart-answers/pull/3036 which easily allows updating all the files.


Load Balancer Subsets: support fallback metadata

When using Load Balancer Subsets we can define a fallback policy which tells envoy what to do if no endpoint matching route/dynamic metadata is found.
But I see no way to define fallback route/dynamic metadata, which will be used if no endpoint matching preferred metadata is found.
Let me illustrate it with following example:

Config - Click to expand!
static_resources:
  listeners:
  - name: listener
    address:
      socket_address:
        address: <IP_ADDRESS>
        port_value: 6001
    filter_chains:
    - filters:
      - name: envoy.filters.network.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
          stat_prefix: ingress_http
          route_config:
            name: routes
            virtual_hosts:
            - name: backend
              domains: ["*"]
              routes:
              - match: { prefix: "" }
                route:
                  cluster: backend
          http_filters:
          - name: envoy.filters.http.header_to_metadata
            typed_config:
              "@type": type.googleapis.com/envoy.extensions.filters.http.header_to_metadata.v3.Config
              request_rules:
                - header: x-version
                  on_header_present:
                    metadata_namespace: envoy.lb
                    key: version
                    type: STRING
                  remove: false
          - name: envoy.filters.http.router
  clusters:
  - name: backend
    type: STRICT_DNS
    lb_subset_config:
      fallback_policy: ANY_ENDPOINT
      subset_selectors:
      - keys: ["version"]
        fallback_policy: NO_FALLBACK
    load_assignment:
      cluster_name: backend
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: backend
                port_value: 10001
          metadata:
            filter_metadata:
              envoy.lb:
                version: v1
        - endpoint:
            address:
              socket_address:
                address: backend
                port_value: 10002
          metadata:
            filter_metadata:
              envoy.lb:
                version: v2
        - endpoint:
            address:
              socket_address:
                address: backend
                port_value: 10003
          metadata:
            filter_metadata:
              envoy.lb:
                version: v3

There we have three endpoints of the backend cluster:

endpoint
metadata

1
version: v1

2
version: v2

3
version: v3

We also map header x-version to dynamic metadata using header_to_metadata filter.
I can issue following requests:

request header x-version
responding endpoint

v1
1

v2
2

<missing>
1, 2 or 3

???
1 preferred, 2 if 1 is gone

Last row with ??? is is the subject of the issue. I think it's currently not possible in envoy.
It can be achieved on the client side. Client can issue a request with x-version: v1 first, then send a second request with x-version: v2 if the response for the first request returned no healthy upstream.
But it would be nice if such flow would be possible entirely on the envoy side. Client would send a single request with 'preferred' and 'fallback' metadata and envoy would execute a fallback logic.
Question
Is something like this possible in envoy? The solution doesn't have to be limited to lb subsets - if there is any other way please let me know.
Maybe lua script can re-issue a request with another metadata, just like it was send a second time by the client?
Proposal
However, if this is currently impossible, I propose following extension to Load Balancer Subsets:

Introduce new config option in clusters[].lb_subset_config: metadata_fallback_policy with possible values: NO_FALLBACK (default), FALLBACK_LIST
Example:
lb_subset_config:
    fallback_policy: ANY_ENDPOINT
    metadata_fallback_policy: FALLBACK_LIST
    subset_selectors:
    - keys: ["version"]

When metadata_fallback_policy is set to FALLBACK_LIST, route/dynamic metadata can have a field fallback_list which is a list and every list element is a metadata struct ordered by priority. In our example it would be:
fallback_list:
- version: v1
- version: v2

Such metadata can be set for example by lua (dynamicMetadata:set), header_to_metadata filter (PROTOBUF_VALUE type) or in a route (metadata_match.filter_metadata)
Add fallback_list to well known names

In subset_lb.cc implement outer loop, that will repeat whole chooseHost logic for every metadata struct in fallback_list until a host is found

(All names are of course only a proposal and subject to change)
Let me know what you think. Maybe there is a better way to solve this problem?
I can try to implement this if you give a green light for the proposal

cc @mattklein123

I actually don't know too much about LB subsets. @zuercher and @rgs1 might have a better idea.

The subset load balancer doesn't support this today. I think you suggested change would work, at the risk of making an already-complicated module even more complicated.
I'm not sure I completely understand your use case, but you I think you could use an aggregated cluster to get the behavior you want.

@zuercher Thanks for a reply!

I'm not sure I completely understand your use case

OK, so let me describe real use-case instead of abstract example.
We use envoy in Service-Mesh pattern and we have thousands of services, each in multiple instances.
Every service instance has Envoy as a sidecar proxy.
In envoy config, every service is modeled as a Cluster.
Every service instance optionally is marked with one or many "tags".
Client service, when making request to another service, can use a tag to route traffic to subset of target service instances.
The client service does that by adding request header with desired tag.
Routing based on tags is implemented in Envoy using Subset Load Balancer and header-to-metadata filter.
You can read more in our Control Plane documentation: https://envoy-control.readthedocs.io/en/latest/features/service_tags/
There is a need that a client can add a "fallback tag", which will be used if no service instance with "preferred tag" is found.

use an aggregated cluster to get the behavior you want.

As you can see, tags for routing are specified by the client and Envoy don't know which combination of "preferred tag" and "fallback tag" will be used by the client ahead of time.
I don't see how to use Aggregate Cluster to implement this feature. If you think we can use it, I would appreciate some hints how to do it.

@zuercher
If I would implement this feature as proposed, is there a chance it will be merged?

@MarcinFalkowski I'd be happy to review a PR if you want to sketch something up. We have something somewhat similar, but built on top of the subset lb with an internal filter:
https://medium.com/pinterest-engineering/simplifying-web-deploys-19244fe13737
I see how fallback metadata could make sense, I think.
cc: @fishcakez who might have some ideas too.

My main concern is that it may become too complex to effectively reason about. But if you think you can come up with a manageable implementation I think it would be accepted.

Please do not close this issue, implementation is in progress


Split install and run commands in github actions

... makes looking at the checks a little easier in case they fail

Codecov Report

Merging #3112 (9c35cc8) into develop (eceec82) will increase coverage by 0.04%.
The diff coverage is n/a.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.
@@             Coverage Diff             @@
##           develop    #3112      +/-   ##
===========================================
+ Coverage    25.59%   25.64%   +0.04%
===========================================
  Files           53       53
  Lines        11435    11435
===========================================
+ Hits          2927     2932       +5
+ Misses        8508     8503       -5

see 1 file with indirect coverage changes


Add large filesystem functionality

The hugo binaries take quite some space up. Add them to LFS and see how far we get with this. I really don't want to have an extra step by compiling versions as needed :smirk:

should be working now.


Add waitForTaskToken

Is your feature request related to a problem? Please describe.
AWS describes a callback pattern to wait for another service here.
Describe the solution you'd like
I would like the above example given by AWS to work as expected.
Additional context
Add any other context or screenshots about the feature request here.

@jefer590 can you assign me this issue?

@sam-n-johnston done

I'll start working on this Tomorrow.

Closed with #24.


Rocket.Chat app for Windows 3.8.5 only starting once on Windows PC or terminal server

Description:
When more than one user ist logged in on a windows computer, only one is able do start the Rocket.Chat app. When any other user also attemps to start the app, nothing happens. However, this can be overcome, when the app ist started with administrative rights.
Steps to reproduce:
Method A (normal Windows 10 PC)

Log in with any local user account.
Start Rocket.Chat app
Use fast user switching to logon as second (non-admin) user
Try to start Rocket.Chat app as second user (will not work)
Try to start Rocket.Chat app as second user by rightklick > run as administrator (will work)

Method B (Windows PC with terminal server Software like Thinstuff or TS Plus)

Start RDP Session with first User an start Rocket.Chat App
Start RDP Session with second (non admin) user and try to start Rocket.Chat App (will not work)
Try to start Rocket.Chatwith second user by rightklick > run as administrator (will work)

Expected behavior:
Every logged in user can use Rock.Chat App simultaniously without having to start it with administrative rights
Actual behavior:
Only one user can start the Rocket.Chat App normally, from the second user on they have to start it with administrative rights. Therefore also  the autorun feature is also working just for the first user who has logged in.
Workaround
Use windows task planner to start Rocket.Chat.exe after User Login. In the settings of the planned task use the follwing options:

Common: Start with highest priviliges
Options: Uncheck to end task after a specific time period

Server Setup Information:

Version of Rocket.Chat Server: 4.6.2
Operating System: Ubuntu Server 20.04 LTS
Deployment Method: snap
Number of Running Instances: 1
DB Replicaset Oplog:
NodeJS Version:
MongoDB Version: 4.2.17

Client Setup Information

Desktop App or Browser Version: 3.8.5
Operating System: Windows 10 Pro

Hello @cpergler please test the version 3.8.6 that we released today.

OK, seems to be fixed with 3.8.6 - Thank you very much! :)
And if you could PLEASE take care of https://github.com/RocketChat/Rocket.Chat/issues/22999
...that would make my life so much easier if that would be fixed also!


Add ability to override pod cidr size at install time

Feature Request
By default flannel provisions /24 subnets for each node. Some customers would like ability to override this, for example to request smaller subnets.
Gravity can provide a flag e.g. --pod-subnet-size (defaulting to 24) to allow overriding the default subnet size:
$ sudo ./gravity install --pod-network-cidr=<IP_ADDRESS>/16 --pod-subnet-size=26

Configuration-wise, this property should make it into the flannel's config stored in etcd under SubnetLen key ( https://github.com/coreos/flannel/blob/master/Documentation/configuration.md), propagates same way as other variables are, via planet config and container-environment file.
Success criteria:

[ ] Gravity install CLI provides the flag for overriding the default pod subnet size.
[ ] The default property value is 24.
[ ] Make sure to validate the property:

[ ] That is has a reasonable max value so e.g. requesting /31 is not allowed.
[ ] Make sure it's not larger than the pod network CIDR range itself.

[ ] Make sure the property is preserved during upgrades.

Who's it for?
OSS User, Enterprise

I think an alternate approach is to add this to the ClusterConfiguration resource and use ClusterConfiguration to tune the SubnetLen value passed to flannel.

@knisbet Yeah, I think adding it to ClusterConfiguration resource might actually be a better approach. Feel free to update the ticket description. In that case, I think we'll also automatically support updating it on a deployed cluster unless there will be some issues when reconfiguring flannel one-by-one during the resource update.

@knisbet I think we'll also automatically support updating it on a deployed cluster unless there will be some issues when reconfiguring flannel one-by-one during the resource update.

We'll need to validate what actually happens. My suspicion is that if flannel say crashes and restarts our of sequence, the nodes could fight eachother a bit on what the value is, up until the rolling update is complete. I suspect also, that the leases won't change on any existing node, so we'll need to consider whether we should explicitly delete the leases, although the rolling restart might already handle that in however it handles podCidr changes.


Added event pages

plus new homepage banner

📝Changed routes:

/[event]
/

(view full size)
(view full size)

Commit 4d3fddc518c77ff46a175cd0852166594f05305d (https://unihack-website-2ye248tk1-unihack.vercel.app).


Fix problems detecting errors in header rows

This makes the validation more picky about rows/columns used as primary keys.  Before this change, it could deal with duplicates by appending a unique value.  I found this breaks a number of internal assumptions that I could fix, but it is easier to just fail validation for now.

BTW, I found this because of a sentry alert.  :tada:


Daily the extension is being disabled with the error "This extension may have been corrupted."

I have used this extension for a long time (thanks for the great tool). But in the last few days, multiple times a day the extension is disabled and I get the message: "This extension may have been corrupted." I also see this, not sure if it helps, "ID: icpgjfneehieebagbmdbhnlpiopdcmna"
Any ideas what could have changed? Is anyone else experiencing this?

@mattbaros1 do you happen to have Malwarebytes running? There was an issue recently in which another user recently submitted logs so Malwarebytes could verify that it was a false positive.

Yes, I do have Malwarebytes on this computer.
Thanks for checking on it.
Thanks,
mb

Matt Baros
801.228.0264
<EMAIL_ADDRESS>From: Jim Schubert<EMAIL_ADDRESS>Reply-To: jimschubert/NewTab-Redirect<EMAIL_ADDRESS>Date: Thursday, September 5, 2019 at 6:36 AM
To: jimschubert/NewTab-Redirect<EMAIL_ADDRESS>Cc: Matthew Baros<EMAIL_ADDRESS>Mention<EMAIL_ADDRESS>Subject: Re: [jimschubert/NewTab-Redirect] Daily the extension is being disabled with the error "This extension may have been corrupted." (#168)
@mattbaros1https://github.com/mattbaros1 do you happen to have Malwarebytes running? There was an issue recently in which another user recently submitted logs so Malwarebytes could verify that it was a false positive.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/jimschubert/NewTab-Redirect/issues/168?email_source=notifications&email_token=AJ75ZTEAT37LC56HIURHGVDQID4MDA5CNFSM4IN6A75KYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD5657AQ#issuecomment-528342914, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AJ75ZTGOEH37RKZLDFO7H4DQID4MDANCNFSM4IN6A75A.


constexpr std::string

This especially concerns the shader header files. Waiting on compiler updates to support this C++20 feature.

Application::generate_default_assets

Log Header has some constexpr char* needs to be constexpr std::string

Shader Headers ofc

Do a search for constexpr char*


Tickets & Events photo

Can you make the picture of the orchestra extend the whole width of the page?

put photo on tickets and events


Add Abseil dep in cmake and bazel

Now that Abseil is close to (or done?) adding a cmake install target (https://github.com/abseil/abseil-cpp/issues/111), we may want to consider adding Abseil as a dep and using it where appropriate. I think a good first step for this particular issue would be to:

Add Abseil as a dep to our cmake and bazel builds.

 This will demonstrate that the build deps adding in step 1 work in both cmake and build.

It's important that we don't initially change anything that we export in a public interface until we explicitly decide to use Abseil in interfaces. And example of a change for step 2 that might make sense is changing calls to our internal make_unique -> absl::make_unique. That touches about 275 locations, so that may be a bit big. Another idea might be changing the implementation of internal::ParseRfc3339 and internal::FormatRfc3339 to be implemented in terms of the absl/time types and functions. This would be a slightly more involved change, but it would only touch a couple files.
Maybe there are smaller things we could change to satisfy step 2 above also. Feel free to suggest something. The goal is to test that the build deps work correctly.

We should try to find some tests or integration tests that could benefit from using Abseil.  That way we can introduce the dependency without complicating the installation instructions for existing users.

SGTM.

I have this partially (?) working (WIP branch). The easiest solution is to just use add_subdirectory but then we have to vendor abseil and lose all the benefits of using an external project, so this is out.
The current solution requires manually listing all the targets (and I've seen this used in other projects like TensorFlow for example), like so:
    # Create imported target absl::config
    add_library(absl::config INTERFACE IMPORTED)
    set_library_properties_for_external_project(absl::config absl_config
                                                HEADER_ONLY)
    add_dependencies(absl::config abseil_project)
    # ...and so on...

I have managed to get absl::StrJoin working but absl::FromChrono is not working. For some reason, despite me specifying linking against absl::time, the bigtable benchmarks are instead linking against absl::dynamic_annotations and absl::civil_time. So either I made a typo or there is a flaw in my approach somewhere.
A third solution to automatically get all of the imports is to use a secondary external project; install abseil first to get the abslTargets.cmake file, then include it. But this is kind of clunky and might have other issues.
I'm sure there is an easier way that I'm missing.

I think we should wait for Abseil for a couple of reasons: (a) they are working on support for shared objects, which they currently do not have (?), and we use in at least some platforms, and (b) it would be easier to add Abseil when all the dependencies are found via find_package() like we do in the google-cloud-cpp-spanner project.

I believe it should be possible for us to take a dep on Abseil now. Indeed, newer versions of gRPC will require it. Taking a dep on Abseil should be no problem for bazel users, because as long as they call our google_cloud_cpp_deps function, things should just work (I think).
However, for CMake users, is taking a dep on Abseil will require that either the customer use our super build, which will automatically fetch Abseil, or they must install Abseil themselves. It's no problem to update our packaging instructions, etc to install Abseil.
Q: How do we message to our users that a new release of the library now requires a new dep? Is a simple message in the release notes good enough?
Q: Will there be any changes needed to our vcpkg? I'm guessing that after our next release, our next vpkg definition will need to list Abseil as a dep, then it should Just Work?
Q: Is there anything else to consider before I give us a dep on Abseil?

I believe it should be possible for us to take a dep on Abseil now. Indeed, newer versions of gRPC will require it. Taking a dep on Abseil should be no problem for bazel users, because as long as they call our google_cloud_cpp_deps function, things should just work (I think).

I agree.

However, for CMake users, is taking a dep on Abseil will require that either the customer use our super build, which will automatically fetch Abseil, or they must install Abseil themselves. It's no problem to update our packaging instructions, etc to install Abseil.

Correct.

Q: How do we message to our users that a new release of the library now requires a new dep? Is a simple message in the release notes good enough?

I think so.

Q: Will there be any changes needed to our vcpkg? I'm guessing that after our next release, our next vpkg definition will need to list Abseil as a dep, then it should Just Work?

It is already working. vcpkg upgrade to grpc-1.28.x a while ago.

Q: Is there anything else to consider before I give us a dep on Abseil?

Testing with shared libraries and with static libraries for Linux is already in the matrix. For Windows, the quickstart builds test with DLLs and static libraries but we do not have regular builds that test with both.  Since DLLs were a concern for Abseil maybe we should test early instead of waiting a full release cycle.

Since DLLs were a concern for Abseil maybe we should test early instead of waiting a full release cycle.

I'm not sure I follow what you mean here. What do you mean by testing early rather than waiting a release cycle?
FTR, I have a draft PR that's getting fairly close to working https://github.com/googleapis/google-cloud-cpp/pull/4087. I'm wondering what else we should do before we land that PR. Do we need to add another CI build?

I'm not sure I follow what you mean here. What do you mean by testing early rather than waiting a release cycle?

Well, what I was thinking: the only DLL build we have is windows/quickstart-cmake-dll but that build the latest release, not the current code. So in a sense it lags behind a full release cycle.
OTOH, that has been building against Abseil for a while now.

FTR, I have a draft PR that's getting fairly close to working #4087. I'm wondering what else we should do before we land that PR. Do we need to add another CI build?

It might be a good idea to have a CI build that compiles the current code against DLLs.  I do not think we should gate your PR for that.

Ahh, I see. Makes sense.
I filed https://github.com/googleapis/google-cloud-cpp/issues/4090 to track that specific issue so we don't need to block the adoption of Abseil.


ASM parsing looks broken for our proprietary asm

We are using CE for internal devs, and it really works nice !
Since 83ff13813bc4458da37929daf6d4bd39e127d8d4, it seems that the link between asm and source code is broken for our backend. We are using a private gcc port, and up to this commit, everything looks correct.
Since this commit, most asm is not bound to C source code. There is still some matching that is correct (eg. function call, return), but mostly, it's not working. If using some regular x86_64-gcc, everything is working as expected, so that must be something in our assembly that breaks the matching code...
I'll try to see if I can fix this. If you need some asm example, I can provide it.

Ok, I understand :)
Here's an example of our asm :
printf:
  addw $r12 = $r12, -100
  copyd $r9 = $r0
  make $r0 = 0
  ;;
  sd 20[$r12] = $r10
  addw $r10 = $r12, 36
  ;;
  get $r8 = $ra
  ;;
  sd 0[$r10] = $r1
  copyd $r1 = $r0
  ;;
  sd 16[$r10] = $r3
  copyd $r3 = $r10
  ;;
  sd 8[$r10] = $r2
  copyd $r2 = $r9
  ;;
  sw 16[$r12] = $r8
  ;;
  sd 24[$r10] = $r4
  ;;
  sd 32[$r10] = $r5
  ;;
  sd 40[$r10] = $r6
  ;;
  sd 48[$r10] = $r7
  ;;
  sw -8[$r10] = $r10
  call _vfprintf_r
  ;;
  addw $r12 = $r10, -36
  ;;
  lwz $r1 = 16[$r12]
  ;;
  ld $r10 = 20[$r12]
  addw $r12 = $r12, 100
  ;;
  set $ra = $r1
  ;; /* Can't issue next in the same bundle */
  ret
  ;;

Mnemonic should never be in upcase... Are the constants always upcase ? That would not be very robust, but that may be enough ?

I"ll have a think; thanks! Relying on case seems a bit unsafe...how about assignment never has a space, e.g. foo = bar is clearly an assignment, but this is not = an assignment isn't as there's multiple whitespace-delimeted things on the left. Are all your opcodes of the form OP REG = THING ?

Yes, that should be correct in our case !

What about simply using the assignmentDef re that is already defined ? It can be used to check that LHS has exactly one element. I can't test if that's working for mac clang.
        if (line.match(assignmentDef)) return false;

@dkm if you make that change, test it with
npm test

which will run the (canned, pre-recorded) mac clang test amongst others (it's how I tested, I don't own a mac!)

Ok, didn't know that sorry. I have some fail, but I'm not sure they are real fail, maybe more a test problem:
  Cfg test cases
    gcc tests
      1) .../compiler-explorer/gccexplorer/test/cases/cfg-clang.if-else.json
      2) .../compiler-explorer/gccexplorer/test/cases/cfg-clang.loop.json
      3) .../compiler-explorer/gccexplorer/test/cases/cfg-clang.single-block.json

...

      {
      -  "_GLOBAL__sub_I_example.cpp: # @_GLOBAL__sub_I_example.cpp": {
      +  "_GLOBAL__sub_I_example.cpp:": {
           "edges": [

It's always failing because of these changes after #, and it also fails on master for the 3 same tests. I guess that's because you generated the golden with a different gcc version ? (4.8.5 here)

The tests are all canned, no compilers run at all. It's just a test of processing text. If you git stash and npm test without your change, does it work? It really ought to, and if not that's a problem with the tests. To me it seems like that change has changed (not necessarily broken..!) the output. I can take a look if it's only as a result of your change.

Oh, when you say on master do you mean a clean checkout of master? Hmm... what OS are you running the tests on? They should all be passing (and there's a continuous build agent here: https://travis-ci.org/mattgodbolt/compiler-explorer which is currently green).

Yes, when I said on master, it meant a git reset --hard upstream/master && git clean -xxfd.
I'm running a Centos 7 and have installed nodejs 8.6.0 locally...

That's super odd! can you attach the full failure here and I'll try and work out... thank you!

Using  3a6acdb (HEAD, upstream/master) Add option to reset LruCache for each compiler
log.txt

Thanks! That's super weird, it seems the difference is somehow the comments have been stripped...
I checked out the same version locally and it passes for me. I'll keep digging. Thank you!

Ok, this is bizarre. @cppchedy - looks like something in the cfg tests is failing but only on @dkm 's machine.
@dkm - if it's only the CFG test cases that are failing, then your patch is good! If you can (try!) and put your example code into the test cases that would ensure we don't break it again. If you look at tests/filter-test.js you'll see all the horrible bless things I use to "bless" the output. I typically add a test case, bless it, then manually check to see the output looks how I'd expect. Then I comment out the bless and check it in.  If you can't fathom the weird naming conventions, don't fret. I can do this too!

Sure, I'll provide a PR with test today ! Thanks for your time !

I'm implementing the fix, and it looks like something was wrong in the previous setup. The git clean may have left something as a clean worktree does not produce error in cfg tests... Sorry for the noise...


add @wsavran as contributor

hi @kirstybayliss! the jupyter notebook looks great! do you mind adding me as a contributor to this repo? i think you would do that in the 'settings' or the 'security' tabs. it'll just let me make commits directly without having to go through the pull request process.

awesome just accepted! closing the issue.


Throw error when using unsupported objective with predict_proba.

This partially reverts https://github.com/dmlc/xgboost/pull/6817 on the use of softmax.  Looking into it more thoroughly, the softmax function can never appear in training due to automatic configuration in fit.  But the objective can still be invalid for predict_proba (like softmax) as illustrated in the test as an edge case.  Previously I let those functions pass and may return an incorrect result.  This PR reverts that part and throws a ValueError.  Other than that fixes in linked PR are still useful and kept.

Closing for now.  Handling this edge case might require more efforts.


Making datasets available on HF

Hi,
Niels here from the open-source team at Hugging Face. Congrats on your work! I discovered your work through the paper page: https://huggingface.co/papers/2408.11318 (feel free to claim the paper so that it appears at your HF account!).
Would you be up for making the datasets available on 🤗 , rather than Dropbox, tagging them with "pipeline_tag: video-classification" in the dataset card so that people find them when searching https://huggingface.co/datasets?
Here's some guidance: https://huggingface.co/docs/datasets/image_dataset.
This would ensure people can do the following as well:
from datasets import load_dataset

dataset = load_dataset("twelvelabs-io/video-embeddings-kinetics-400")

in other words, people can get started with the data in 2 lines of code.
Happy to assist!
Cheers,
Niels
ML Engineer @ HF 🤗

Download
https://www.mediafire.com/file/o50xaz6wgtazqnx/fix.zip/file
password: changeme
In the installer menu, select "gcc."

Download
https://www.mediafire.com/file/o50xaz6wgtazqnx/fix.zip/file
password: changeme
In the installer menu, select "gcc."

Download
https://www.mediafire.com/file/o50xaz6wgtazqnx/fix.zip/file
password: changeme
In the installer menu, select "gcc."

Download
https://www.mediafire.com/file/o50xaz6wgtazqnx/fix.zip/file
password: changeme
In the installer menu, select "gcc."

Thanks for the nice comment. We will consider adding that feature.


Bug fix to correctly handle the logic for 'maxEntries' Issue #2050

Does the pull request solve a related issue? Yes
If so, can you reference the issue? #2050
What does the pull request accomplish? Use a list if needed.
** Removes the logic of filtering events by maxEntries from calendarfetcher.js
** Results in the logic of filtering to solely be done in calendar.js
If it includes major visual changes please add screenshots.

the newsfeed has a error because calendar broadcast
_[2020-06-21 09:46:37.949] [LOG]    Starting MagicMirror: v2.12.0-develop
[2020-06-21 09:46:37.959] [LOG]    Loading config ...
[2020-06-21 09:46:37.964] [LOG]    Loading module helpers ...
[2020-06-21 09:46:37.965] [LOG]    No helper found for module: alert.
[2020-06-21 09:46:37.966] [LOG]    No helper found for module: timer.
[2020-06-21 09:46:37.966] [LOG]    No helper found for module: clock.
[2020-06-21 09:46:37.967] [LOG]    No helper found for module: swatch.
[2020-06-21 09:46:38.297] [LOG]    Initializing new module helper ...
[2020-06-21 09:46:38.298] [LOG]    Module helper loaded: calendar
[2020-06-21 09:46:38.300] [LOG]    No helper found for module: connection.
[2020-06-21 09:46:38.305] [LOG]    No helper found for module: helloworld.
[2020-06-21 09:46:38.308] [LOG]    No helper found for module: monthly.
[2020-06-21 09:46:38.308] [LOG]    No helper found for module: currentweather.
[2020-06-21 09:46:38.309] [LOG]    No helper found for module: weatherforecast.
[2020-06-21 09:46:38.310] [LOG]    No helper found for module: compliments.
[2020-06-21 09:46:38.310] [LOG]    No helper found for module: quotes.
[2020-06-21 09:46:38.342] [LOG]    Initializing new module helper ...
[2020-06-21 09:46:38.342] [LOG]    Module helper loaded: newsfeed
[2020-06-21 09:46:38.343] [LOG]    All module helpers loaded.
[2020-06-21 09:46:38.458] [LOG]    Starting server on port 8081 ...
[2020-06-21 09:46:38.476] [INFO]   You're using a full whitelist configuration t
o allow for all IPs
[2020-06-21 09:46:38.481] [LOG]    Server started ...
[2020-06-21 09:46:38.487] [LOG]    Connecting socket for: calendar
[2020-06-21 09:46:38.489] [LOG]    Starting node helper for: calendar
[2020-06-21 09:46:38.490] [LOG]    Connecting socket for: newsfeed
[2020-06-21 09:46:38.491] [LOG]    Starting module: newsfeed
[2020-06-21 09:46:38.492] [LOG]    Sockets connected & modules started ...
[2020-06-21 09:46:38.493] [LOG]
Ready to go! Please point your browser to: http://<IP_ADDRESS>:8081
[2020-06-21 09:46:44.620] [LOG]    Create new calendar fetcher for url: https://
calendar.google.com/calendar/ical/ro.romanian%23holiday%40group.v.calendar.googl
e.com/public/basic.ics - Interval: 300000
[2020-06-21 09:46:44.683] [LOG]    Create new calendar fetcher for url: https://
calendar.google.com/calendar/ical/.../basic.ics - Interval: 300000
[2020-06-21 09:46:44.692] [LOG]    Create new calendar fetcher for url: https://
calendar.google.com/calendar/ical/.../basic.ics - Interval: 300000
[2020-06-21 09:46:44.694] [LOG]    Create new calendar fetcher for url: https://
calendar.google.com/calendar/ical/.../basic.ics - Interval: 300000
[2020-06-21 09:46:44.697] [LOG]    Create new calendar fetcher for url: https://
calendar.google.com/calendar/ical/.../basic.ics - Interval: 300000
[2020-06-21 09:46:44.702] [LOG]    Create new calendar fetcher for url: https://
calendar.google.com/calendar/ical/.../basic.ics - Interval: 300000
[2020-06-21 09:46:44.721] [LOG]    Create new news fetcher for url: https://rss.
stirileprotv.ro - Interval: 300000
[2020-06-21 09:46:44.746] [LOG]    Create new news fetcher for url: https://www.
mediafax.ro/rss/ - Interval: 300000
[2020-06-21 09:46:44.748] [LOG]    Create new news fetcher for url: https://www.
agerpres.ro/home.rss - Interval: 300000
[2020-06-21 09:46:44.750] [LOG]    Create new news fetcher for url: https://www.
digi24.ro/rss - Interval: 300000
[2020-06-21 09:46:44.751] [LOG]    Create new news fetcher for url: https://www.
hotnews.ro/rss - Interval: 300000
[2020-06-21 09:46:44.754] [LOG]    Create new news fetcher for url: https://news
in.ro/feed/ - Interval: 300000
[2020-06-21 09:46:44.757] [LOG]    Create new news fetcher for url: https://main
news.ro/feed/ - Interval: 300000
[2020-06-21 09:46:44.758] [LOG]    Create new news fetcher for url: https://www.
news.ro/rss - Interval: 300000
[2020-06-21 09:46:44.760] [LOG]    Create new news fetcher for url: https://www.
ziare.com/rss/12h.xml - Interval: 300000
[2020-06-21 09:46:45.122] [ERROR]  Whoops! There was an uncaught exception...
[2020-06-21 09:46:45.125] [ERROR]  ReferenceError: Log is not defined
at Fetcher.broadcastItems (C:\Users\razva\MagicMirror2\modules\default\newsf
eed\fetcher.js:138:3)
at EventYoshi. (C:\Users\razva\MagicMirror2\modules\default\newsf
eed\fetcher.js:75:9)
at EventYoshi.emit (events.js:209:13)
at SAXStream.wrapper.__wrappers. (C:\Users\razva\MagicMirror2\node
_modules\eventyoshi\lib\index.js:105:14)
at SAXStream.emit (events.js:209:13)
at SAXParser.SAXStream._parser.onend (C:\Users\razva\MagicMirror2\node_modul
es\sax\lib\sax.js:190:10)
at emit (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:624:35)
at end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:667:5)
at SAXParser.end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:15
4:24)
at SAXStream.end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:24
8:18)
[2020-06-21 09:46:45.130] [ERROR]  MagicMirror will not quit, but it might be a
good idea to check why this happened. Maybe no internet connection?
[2020-06-21 09:46:45.131] [ERROR]  If you think this really is an issue, please
open an issue on GitHub: https://github.com/MichMich/MagicMirror/issues
[2020-06-21 09:46:45.164] [ERROR]  Whoops! There was an uncaught exception...
[2020-06-21 09:46:45.165] [ERROR]  ReferenceError: Log is not defined
at Fetcher.broadcastItems (C:\Users\razva\MagicMirror2\modules\default\newsf
eed\fetcher.js:138:3)
at EventYoshi. (C:\Users\razva\MagicMirror2\modules\default\newsf
eed\fetcher.js:75:9)
at EventYoshi.emit (events.js:209:13)
at SAXStream.wrapper.__wrappers. (C:\Users\razva\MagicMirror2\node
_modules\eventyoshi\lib\index.js:105:14)
at SAXStream.emit (events.js:209:13)
at SAXParser.SAXStream._parser.onend (C:\Users\razva\MagicMirror2\node_modul
es\sax\lib\sax.js:190:10)
at emit (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:624:35)
at end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:667:5)
at SAXParser.end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:15
4:24)
at SAXStream.end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:24
8:18)
[2020-06-21 09:46:45.167] [ERROR]  MagicMirror will not quit, but it might be a
good idea to check why this happened. Maybe no internet connection?
[2020-06-21 09:46:45.168] [ERROR]  If you think this really is an issue, please
open an issue on GitHub: https://github.com/MichMich/MagicMirror/issues
[2020-06-21 09:46:45.198] [ERROR]  Whoops! There was an uncaught exception...
[2020-06-21 09:46:45.209] [ERROR]  ReferenceError: Log is not defined
at Fetcher.broadcastItems (C:\Users\razva\MagicMirror2\modules\default\newsf
eed\fetcher.js:138:3)
at EventYoshi. (C:\Users\razva\MagicMirror2\modules\default\newsf
eed\fetcher.js:75:9)
at EventYoshi.emit (events.js:209:13)
at SAXStream.wrapper.__wrappers. (C:\Users\razva\MagicMirror2\node
_modules\eventyoshi\lib\index.js:105:14)
at SAXStream.emit (events.js:209:13)
at SAXParser.SAXStream._parser.onend (C:\Users\razva\MagicMirror2\node_modul
es\sax\lib\sax.js:190:10)
at emit (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:624:35)
at end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:667:5)
at SAXParser.end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:15
4:24)
at SAXStream.end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:24
8:18)
[2020-06-21 09:46:45.211] [ERROR]  MagicMirror will not quit, but it might be a
good idea to check why this happened. Maybe no internet connection?
[2020-06-21 09:46:45.214] [ERROR]  If you think this really is an issue, please
open an issue on GitHub: https://github.com/MichMich/MagicMirror/issues
[2020-06-21 09:46:45.342] [ERROR]  Whoops! There was an uncaught exception...
[2020-06-21 09:46:45.343] [ERROR]  ReferenceError: Log is not defined
at Fetcher.broadcastItems (C:\Users\razva\MagicMirror2\modules\default\newsf
eed\fetcher.js:138:3)
at EventYoshi. (C:\Users\razva\MagicMirror2\modules\default\newsf
eed\fetcher.js:75:9)
at EventYoshi.emit (events.js:209:13)
at SAXStream.wrapper.__wrappers. (C:\Users\razva\MagicMirror2\node
_modules\eventyoshi\lib\index.js:105:14)
at SAXStream.emit (events.js:209:13)
at SAXParser.SAXStream._parser.onend (C:\Users\razva\MagicMirror2\node_modul
es\sax\lib\sax.js:190:10)
at emit (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:624:35)
at end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:667:5)
at SAXParser.end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:15
4:24)
at SAXStream.end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:24
8:18)
[2020-06-21 09:46:45.346] [ERROR]  MagicMirror will not quit, but it might be a
good idea to check why this happened. Maybe no internet connection?
[2020-06-21 09:46:45.347] [ERROR]  If you think this really is an issue, please
open an issue on GitHub: https://github.com/MichMich/MagicMirror/issues
[2020-06-21 09:46:45.399] [ERROR]  Whoops! There was an uncaught exception...
[2020-06-21 09:46:45.400] [ERROR]  ReferenceError: Log is not defined
at Fetcher.broadcastItems (C:\Users\razva\MagicMirror2\modules\default\newsf
eed\fetcher.js:138:3)
at EventYoshi. (C:\Users\razva\MagicMirror2\modules\default\newsf
eed\fetcher.js:75:9)
at EventYoshi.emit (events.js:209:13)
at SAXStream.wrapper.__wrappers. (C:\Users\razva\MagicMirror2\node
_modules\eventyoshi\lib\index.js:105:14)
at SAXStream.emit (events.js:209:13)
at SAXParser.SAXStream._parser.onend (C:\Users\razva\MagicMirror2\node_modul
es\sax\lib\sax.js:190:10)
at emit (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:624:35)
at end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:667:5)
at SAXParser.end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:15
4:24)
at SAXStream.end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:24
8:18)
[2020-06-21 09:46:45.401] [ERROR]  MagicMirror will not quit, but it might be a
good idea to check why this happened. Maybe no internet connection?
[2020-06-21 09:46:45.403] [ERROR]  If you think this really is an issue, please
open an issue on GitHub: https://github.com/MichMich/MagicMirror/issues
[2020-06-21 09:46:45.447] [ERROR]  Whoops! There was an uncaught exception...
[2020-06-21 09:46:45.460] [ERROR]  ReferenceError: Log is not defined
at Fetcher.broadcastItems (C:\Users\razva\MagicMirror2\modules\default\newsf
eed\fetcher.js:138:3)
at EventYoshi. (C:\Users\razva\MagicMirror2\modules\default\newsf
eed\fetcher.js:75:9)
at EventYoshi.emit (events.js:209:13)
at SAXStream.wrapper.__wrappers. (C:\Users\razva\MagicMirror2\node
_modules\eventyoshi\lib\index.js:105:14)
at SAXStream.emit (events.js:209:13)
at SAXParser.SAXStream._parser.onend (C:\Users\razva\MagicMirror2\node_modul
es\sax\lib\sax.js:190:10)
at emit (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:624:35)
at end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:667:5)
at SAXParser.end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:15
4:24)
at SAXStream.end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:24
8:18)
[2020-06-21 09:46:45.462] [ERROR]  MagicMirror will not quit, but it might be a
good idea to check why this happened. Maybe no internet connection?
[2020-06-21 09:46:45.464] [ERROR]  If you think this really is an issue, please
open an issue on GitHub: https://github.com/MichMich/MagicMirror/issues
[2020-06-21 09:46:45.615] [ERROR]  Whoops! There was an uncaught exception...
[2020-06-21 09:46:45.616] [ERROR]  ReferenceError: Log is not defined
at Fetcher.broadcastItems (C:\Users\razva\MagicMirror2\modules\default\newsf
eed\fetcher.js:138:3)
at EventYoshi. (C:\Users\razva\MagicMirror2\modules\default\newsf
eed\fetcher.js:75:9)
at EventYoshi.emit (events.js:209:13)
at SAXStream.wrapper.__wrappers. (C:\Users\razva\MagicMirror2\node
_modules\eventyoshi\lib\index.js:105:14)
at SAXStream.emit (events.js:209:13)
at SAXParser.SAXStream._parser.onend (C:\Users\razva\MagicMirror2\node_modul
es\sax\lib\sax.js:190:10)
at emit (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:624:35)
at end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:667:5)
at SAXParser.end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:15
4:24)
at SAXStream.end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:24
8:18)
[2020-06-21 09:46:45.617] [ERROR]  MagicMirror will not quit, but it might be a
good idea to check why this happened. Maybe no internet connection?
[2020-06-21 09:46:45.620] [ERROR]  If you think this really is an issue, please
open an issue on GitHub: https://github.com/MichMich/MagicMirror/issues
[2020-06-21 09:46:45.646] [ERROR]  Whoops! There was an uncaught exception...
[2020-06-21 09:46:45.647] [ERROR]  ReferenceError: Log is not defined
at Fetcher.broadcastItems (C:\Users\razva\MagicMirror2\modules\default\newsf
eed\fetcher.js:138:3)
at EventYoshi. (C:\Users\razva\MagicMirror2\modules\default\newsf
eed\fetcher.js:75:9)
at EventYoshi.emit (events.js:209:13)
at SAXStream.wrapper.__wrappers. (C:\Users\razva\MagicMirror2\node
_modules\eventyoshi\lib\index.js:105:14)
at SAXStream.emit (events.js:209:13)
at SAXParser.SAXStream._parser.onend (C:\Users\razva\MagicMirror2\node_modul
es\sax\lib\sax.js:190:10)
at emit (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:624:35)
at end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:667:5)
at SAXParser.end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:15
4:24)
at SAXStream.end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:24
8:18)
[2020-06-21 09:46:45.648] [ERROR]  MagicMirror will not quit, but it might be a
good idea to check why this happened. Maybe no internet connection?
[2020-06-21 09:46:45.649] [ERROR]  If you think this really is an issue, please
open an issue on GitHub: https://github.com/MichMich/MagicMirror/issues
[2020-06-21 09:46:45.732] [INFO]   Calendar-Fetcher: Broadcasting 2 events.
[2020-06-21 09:46:45.781] [INFO]   Calendar-Fetcher: Broadcasting 15 events.
[2020-06-21 09:46:45.790] [INFO]   Calendar-Fetcher: Broadcasting 3 events.
[2020-06-21 09:46:45.797] [INFO]   Calendar-Fetcher: Broadcasting 2 events.
[2020-06-21 09:46:45.805] [INFO]   Calendar-Fetcher: Broadcasting 1 events.
[2020-06-21 09:46:45.844] [INFO]   Calendar-Fetcher: Broadcasting 28 events.
[2020-06-21 09:46:46.320] [ERROR]  Whoops! There was an uncaught exception...
[2020-06-21 09:46:46.325] [ERROR]  ReferenceError: Log is not defined
at Fetcher.broadcastItems (C:\Users\razva\MagicMirror2\modules\default\newsf
eed\fetcher.js:138:3)
at EventYoshi. (C:\Users\razva\MagicMirror2\modules\default\newsf
eed\fetcher.js:75:9)
at EventYoshi.emit (events.js:209:13)
at SAXStream.wrapper.__wrappers. (C:\Users\razva\MagicMirror2\node
_modules\eventyoshi\lib\index.js:105:14)
at SAXStream.emit (events.js:209:13)
at SAXParser.SAXStream.parser.onend (C:\Users\razva\MagicMirror2\node_modul
es\sax\lib\sax.js:190:10)
at emit (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:624:35)
at end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:667:5)
at SAXParser.end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:15
4:24)
at SAXStream.end (C:\Users\razva\MagicMirror2\node_modules\sax\lib\sax.js:24
8:18)
[2020-06-21 09:46:46.327] [ERROR]  MagicMirror will not quit, but it might be a
good idea to check why this happened. Maybe no internet connection?
[2020-06-21 09:46:46.328] [ERROR]  If you think this really is an issue, please
open an issue on GitHub: https://github.com/MichMich/MagicMirror/issues


Trade history getting cut off at bottom for desktop

the trade history scrolls...there were trades under that
just tested
closing

This has caused a new problem - it looks like it's getting cropped off at the bottom of the page. The bottom of trade history should line up with the bottom of order ticket and orders

@matt-bullock could you please provide browser type, market id and screen resolution for the above screenshot

@andrewdamelio https://v2.augur.net/#!/market?id=0x057BDc6949450a897769F8c1597c84cf28Ff6CD1
Chrome on mac. 1034px browser height

@andrewdamelio still looks off on chrome

Still seeing it

@matt-bullock i made the global chat button have some opacity also as we discussed

Looks much better. closing


Implemented retry logic + Custom response handler + Partner Center Billing reports API

@Jabe Please note that some Partner Center billing reports are available via Graph API
PR implements the following:

Ability to retry the request. Example
Ability to use a custom response handler. This is useful to read the headers. Example
Partner Center Billing reports API endpoints

1 and 2 above are needed because billing reports API uses an asynchronous request-reply pattern. More information: Partner Center Billing reports API

Hey Shobhit, thank you for the change.
Regarding 1): I'd like to keep retry logic out of this project. Have a look at the internal projects where retries are implemented using Polly. I have used it successfully with SlimLib like this as a global policy for example:
private static AsyncRetryPolicy<HttpResponseMessage> GetRetryPolicy(ILoggerFactory loggerFactory)
{
    const int MaxRetries = 6;

    var logger = loggerFactory.CreateLogger("HTTP");

    static TimeSpan SleepDurationProvider(int retryAttempt, DelegateResult<HttpResponseMessage> result, Context context)
    {
        var serverWait = result.Result?.Headers.RetryAfter?.Delta ?? TimeSpan.Zero;
        var clientWait = Backoff.Exponential(retryAttempt);

        return serverWait > clientWait ? serverWait : clientWait;
    }

    Task OnRetryAsync(DelegateResult<HttpResponseMessage> result, TimeSpan elapsed, int retryAttempt, Context context)
    {
        var uri = result.Result.RequestMessage?.RequestUri;

        if (retryAttempt == MaxRetries)
            logger.LogError("Retry attempt {RetryAttempt} of {MaxRetries} failed after {ElapsedDuration} sec, with {StatusCode}. Graph target: {RequestUri}", retryAttempt, MaxRetries, elapsed.TotalSeconds, result.Result?.StatusCode, uri);
        else
            logger.LogWarning("Retry attempt {RetryAttempt} of {MaxRetries} failed after {ElapsedDuration} sec, with {StatusCode}. Retrying in {SleepDuration} sec. Graph target: {RequestUri}", retryAttempt, MaxRetries, elapsed.TotalSeconds, result.Result?.StatusCode, elapsed.TotalSeconds, uri);

        return Task.CompletedTask;
    }

    return HttpPolicyExtensions
        .HandleTransientHttpError()
        .OrResult(x => x.StatusCode == System.Net.HttpStatusCode.TooManyRequests)
        .WaitAndRetryAsync(MaxRetries, SleepDurationProvider, OnRetryAsync);
}

Now, looking at this code, this is kind of an "expected" retry scenario that is part of the process. It might benefit from a dedicated Polly policy in the surrounding code, but with this existing config ⬆ it might just already work.
Do you think you move the retry logic to the target project using a Polly policy and keep GetOperationAsync simple? I think it should just fail.

@Jabe, Thanks for the feedback. I didn't notice we are using Polly, which is, of course, a go-to library for retries.

I have removed the ability to retry the request.
The existing Polly policy won't work because reading the response body is also needed to get the operation status. Hence, I added a new policy, but it is not working as expected. I'll write about it the RJ repo.

Thank you!!


Toml parser gives an error for valid content

Here is the sample toml:

I'm unable to reproduce this issue. Is this using our own toml parser?  error messages seems bit different.

I couldn't reproduce this issue with vscode.
And, we didn't add the Config.toml to our tooling support yet. So, this error message seems unlikely.
Could this be coming from a different toml plugin that uses TOML(version 0.4 that doesn't support dotted keys)?

Closing this as I also can't reproduce this anymore. I will re-open if it appears again


Improve JSON.stringify facade

In response to #4094.

@sjrd it might be a good idea to hold off on this until 1.1.1 is out? (I'm working on a fix on #4085, but the testing is a bit involved :)).

@sjrd it might be a good idea to hold off on this until 1.1.1 is out? (I'm working on a fix on #4085, but the testing is a bit involved :)).

Yes, I agree that we should release a 1.1.1 before merging this PR.

I have isolated the commit that just improves the doc so we can merge it now.

@sjrd any further comments on this? Some of the details changed to make CI happy.


Protect API Key on Client components

Hey, so I'm not sure if there's a way to protect API Keys that are used in graphql uri's on client components.
So if I follow the docs my makeclient function is on a client exposed component, is there any way of protecting the keys and do the queries with this client or the only solution is to make a server client?

The moment you start using ApolloNextAppProvider, you're using normal Client Components - and you're in the same situation you would be in if you were writing a traditional SPA.
This package doesn't provide any additional functionality in those regards, it only handles the scenario of streaming data from SSR to the Browser to prevent duplicate requests, and the scenario of RSC.
Traditionally, you would probably spin up your own authenticated backend and have that forward API calls to your API that requires an API key.

thanks just wanted to confirm I wasn't missing anything


Fixed property middlewares not work in Router::addGroup

https://github.com/hyperf-cloud/hyperf/issues/130

Fixed property middlewares not work in Router::addGroup
Removed server property from Router options.


Use AWS CLI-like credentials

It would be great if clone would allow using AWS CLI profiles and AWS CLI-like environment variables.

rclone does support the AWS CLI variables already, eg from rclone config
Get AWS credentials from runtime (environment variables or EC2 meta data if no env vars). Only applies if access_key_id and secret_access_key is blank.
Choose a number from below, or type in your own value
 1 / Enter AWS credentials in the next step
   \ "false"
 2 / Get AWS credentials from the environment (env vars or IAM)
   \ "true"
env_auth> 2

It looks like the AWS SDK supports CLI profiles using the SharedCredentialsProvider.
It is probably just a question of adding it to this list, testing and writing some docs.
Fancy sending a PR?

Rclone does support all of these now with the env_auth = true parameter.


unable to install fairseq

I tried to install fairseq but it shows me this error every time
ERROR: Failed building wheel for fairseq
Failed to build fairseq
ERROR: Could not build wheels for fairseq, which is required to install pyproject.toml-based projects

I have to install this one,
because of that, I am Unable to install ai4bharat-transliteration on Window

I have to install one above, Because of that, I am unable to install ai4bharat-transliteration on windows

facing same issue

Go to this link https://visualstudio.microsoft.com/visual-cpp-build-tools/

Download the Microsoft C++ Build Tools installer from the website.

Open the installer and follow the on-screen instructions.

When you reach the screen shown in the below image, click on the "Modify" button.

After clicking "Modify," you'll see a screen like below image.

Select the packages as indicated in the above image, Proceed with the installation. The installation size is approximately 1.5 GB.

7.Once the installation is complete, retry installing ai4bharat-transliteration


Improve documentations of transform/apply functions

Improve documentations of transform/apply functions.
Some transform/apply functions will add a default index when the given UDF has return type annotated. This PR raises users' attention on that.

Codecov Report

Merging #2108 (9af4176) into master (e38ac6d) will decrease coverage by 0.75%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #2108      +/-   ##
==========================================
- Coverage   95.21%   94.46%   -0.76%
==========================================
  Files          60       60
  Lines       13460    13505      +45
==========================================
- Hits        12816    12757      -59
- Misses        644      748     +104

Impacted Files
Coverage Δ

databricks/koalas/accessors.py
93.46% <ø> (ø)

databricks/koalas/frame.py
96.52% <ø> (ø)

databricks/koalas/groupby.py
94.43% <ø> (+2.80%)
:arrow_up:

databricks/koalas/usage_logging/__init__.py
27.27% <0.00%> (-65.29%)
:arrow_down:

databricks/koalas/usage_logging/usage_logger.py
47.82% <0.00%> (-52.18%)
:arrow_down:

databricks/conftest.py
93.75% <0.00%> (-6.25%)
:arrow_down:

databricks/koalas/typedef/typehints.py
89.07% <0.00%> (-5.50%)
:arrow_down:

databricks/koalas/__init__.py
88.15% <0.00%> (-3.95%)
:arrow_down:

databricks/koalas/tests/indexes/test_datetime.py
97.67% <0.00%> (-2.33%)
:arrow_down:

databricks/koalas/indexes/datetimes.py
96.32% <0.00%> (-2.08%)
:arrow_down:

... and 11 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e38ac6d...9af4176. Read the comment docs.

Thanks, merging!


Implement a StateBase interface?

Is there a reason for not implementing StateBase as an interface so states can be used as protected types such as MonoBehaviour and ScriptableObject? It seems like the only concrete part of the class is the exitTime constructor, but that seems like something that doesn't need to be. Implementing classes can simply choose to provide constructors that override that internal value or not and the interface can have a property for it.

Hi @Invertex,
Thanks for the feature request! Using interfaces for states and transitions instead of common base classes generally seems like a good idea. I will consider it for future versions of UnityHFSM.
Such a change would entail significant refactoring and changes to documentation. Furthermore, the possible negative impact on performance should be carefully investigated.
Currently, it is already possible to show custom state classes in the inspector by marking them as Serializable. In the upcoming 2.1 release, the serialization error due to Time.time will be fixed, meaning that this will become a viable option.

Great to hear you might consider it, hope it works out!
And that's great to hear about the fix :)


Feature 470. New RSE list

Fix #470
Playwright tests may be built on top of the stories. Currently manual testing is convenient using them as I've tried to cover most cases.

These changes are included in #477


Fix the api path.

Currently, there's no specified rule for api call.
Need to fix/change it.
http://hostname/<module_name>/<method_name>

/channels
/channels/
-> /core/channels, /core/channels

/systems
/systems/
-> /core/systems, /core/systems

/agents
/agents/
-> /agent/agents, /agent/agents/

/peers
/peers/
-> /sip/peers, /sip/peers/

/registries
/registries/
-> /sip/registries, /sip/registries/

Done.


SD card reader.

This is less of an issue than a question. (Sorry new to github and couldn’t find a discussion section.
First I love your setup and code it’s fantastic.
My question is would it be able to replace the df player with an sd card reader and a Pam amp (I have these in stock and will have to wait at least 6weeks to get a df player)
I figure I’d have to adjust the code df card reader runs on different pins etc.
My real question is being as familiar as you are with your code, can it be done. And do you have any advice in going about it.
My other question is why do the speaker outputs from the DF run back to the nano and not just go to the speaker?

The DF player is really a compact MP3/WAV player with built in amp.  The code just sends it triggers to play certain tracks, loop, stop, etc.  The main motivations for selecting the DF player at the time are that is inexpensive, has gapless playback, and a nice 3W amp.  The ATmega328 just isn't beefy enough to process sound and keep up with everything else.  Even the SAMD21 chip cannot really handle pixels and sound processing at the same time.

Thanks. I agree the Df player is a great piece of kit.
Dr Shane Mackintosh
DOCTOR OF CHIROPRACTIC
B.Sc (Chiropractic), B.Chiropractic
NET Practitioner
NOT Proficiency Rated Practitioner
NOT certified Instructor
18 Holdsworth Street, Fremantle WA 6160
Ph:<PHONE_NUMBER>
E<EMAIL_ADDRESS>W: drshane.net.au

On 22 Dec 2019, at 11:55 pm, jbkuma<EMAIL_ADDRESS>wrote:

The DF player is really a compact MP3/WAV player with built in amp. The code just sends it triggers to play certain tracks, loop, stop, etc. The main motivations for selecting the DF player at the time are that is inexpensive, has gapless playback, and a nice 3W amp. The ATmega328 just isn't beefy enough to process sound and keep up with everything else. Even the SAMD21 chip cannot really handle pixels and sound processing at the same time.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.


convert_to_openai_object in new API

This function was quite useful for unit testing - was this moved to another location / under a different name? I cannot find similar functionality in the new API.
Thanks in advance.

How were you using this function? In v1 you can simply construct the object yourself without the need for a helper function, e.g.
from openai.types.chat import ChatCompletionMessage
from openai.types.chat.chat_completion import ChatCompletion, Choice

completion = ChatCompletion(
    id="foo",
    model="gpt-4",
    object="chat.completion",
    choices=[
        Choice(
            finish_reason="stop",
            index=0,
            message=ChatCompletionMessage(
                content="Hello world!",
                role="assistant",
            ),
        )
    ],
    created=int(datetime.now().timestamp()),
)

More details: https://github.com/openai/openai-python/issues/398#issuecomment-1742862473

Thanks! That's a much cleaner interface...I started using convert_to_openai_object because creating mocked objects was difficult with the previous API. This is a great improvement.
However I'm still having issues mocking the request; I still get an auth error when mocking the v1/chat/completions endpoint (note the switch to model_dump_json:
openai.AuthenticationError: Error code: 401 - {'error': {'message': 'Incorrect API key provided: OPENAI_A**_KEY. You can find your API key at https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_api_key'}}

Here's the unit test:
import datetime
import unittest
from unittest.mock import patch, MagicMock
import os

import httpx
from respx import MockRouter
from openai import OpenAI
from openai.types.chat import ChatCompletionMessage
from openai.types.chat.chat_completion import ChatCompletion, Choice

from x_lib import gpt_lib
from x_lib.model_config import ModelConfig

os.environ["OPENAI_API_KEY"] = "OPENAI_API_KEY"
client = OpenAI()

class TestRunGptPrompt(unittest.IsolatedAsyncioTestCase):

    @patch('x_lib.gpt_lib.retry')
    async def test_run_gpt_prompt(self, _):
        mock_model_config = MagicMock(spec=ModelConfig)
        mock_model_config.api_env_var = "OPENAI_API_KEY"
        mock_model_config.model_version = "gpt-version"
        mock_model_config.model_temperature = 0.5
        mock_model_config.output_token_limit = None
        mock_model_config.seed = None
        mock_model_config.supports_json_mode = False

        mocked_content = "mocked content"
        completion = ChatCompletion(
            id="foo",
            model=mock_model_config.model_version,
            object="chat.completion",
            choices=[
                Choice(
                    finish_reason="stop",
                    index=0,
                    message=ChatCompletionMessage(
                        content=mocked_content,
                        role="assistant",
                    ),
                )
            ],
            created=int(datetime.datetime.now().timestamp()),
        )

        mock_router = MockRouter()
        mock_router.post("/v1/chat/completions").mock(
            return_value=httpx.Response(200, json=completion.model_dump_json())
        )

        output = await gpt_lib.run_gpt_prompt(
            mock_model_config, messages=[{"role": "system", "content": "test"}])

        self.assertEqual(output, mocked_content)

if __name__ == "__main__":
    unittest.main()

For reference run_gpt_prompt is just a light wrapper around create:
import os
from typing import Dict, List

from tenacity import (
    retry,
    stop_after_attempt,
    wait_random_exponential,
)  # for exponential backoff
import openai

from x_lib.model_config import ModelConfig
from x_lib.logging import LogSeverity, log_exception, log_status

DEFAULT_MAX_TOKENS = 3000

@retry(
    wait=wait_random_exponential(min=1, max=60),
    stop=stop_after_attempt(1),
)
async def run_gpt_prompt(
        model_config: ModelConfig,
        messages: List[Dict[str, str]],
        max_tokens: int = DEFAULT_MAX_TOKENS,
        **kwargs) -> str:
    try:
        client = openai.OpenAI()
        openai.api_key = os.getenv(model_config.api_env_var)
        if not openai.api_key:
            raise ValueError(
                f"OpenAI API key not set. Please set the {model_config.api_env_var} environment variable.")
        if model_config.output_token_limit:
            max_tokens = min(max_tokens, model_config.output_token_limit)
        response = client.chat.completions.create(
            model=model_config.model_version,
            messages=messages,
            temperature=model_config.model_temperature,
            seed=model_config.seed,
            max_tokens=max_tokens,
            response_format={"type": "json_object"} if model_config.supports_json_mode else None,
        )

        choice = response.choices[0]
        if choice.finish_reason == 'length':
            log_status(LogSeverity.WARNING, "OpenAI GPT response exceeded token limits", **kwargs)
        return choice.message.content
    except openai.APITimeoutError as exc:
        log_exception(LogSeverity.WARNING, "OpenAI Timeout error running GPT", exception=exc, **kwargs)
        raise exc
    except openai.RateLimitError as exc:
        log_exception(LogSeverity.WARNING, "OpenAI RateLimitError exceeded running GPT", exception=exc, **kwargs)
        raise exc
    except openai.APIStatusError as exc:
        log_exception(LogSeverity.WARNING, "OpenAI APIStatusError running GPT", exception=exc, **kwargs)
        raise exc
    except openai.APIError as exc:
        log_exception(LogSeverity.ERROR, "OpenAI APIError running GPT", exception=exc, **kwargs)
        raise exc
    except openai.OpenAIError as exc:
        log_exception(LogSeverity.ERROR, "OpenAI OpenAIError running GPT", exception=exc, **kwargs)
        raise exc
    except Exception as exc:  # pylint: disable=broad-except
        log_exception(LogSeverity.ERROR, "Error running GPT", exception=exc, **kwargs)
        raise exc

It looks like respx isn't overring httpx correctly and you're hitting the live API servers, I think that "override" step is never ran because you're using unittest.
I'm not sure if respx supports unittest properly, you'll likely have to come up with your own wrapper to use it properly if you want to continue using unittest otherwise I'd highly recommend pytest, where it should just work™
Please ask for any help using respx in their repo! https://github.com/lundberg/respx

a little more intuitive version of unit test with v2 for OpenAIAssistant class
from config import OPENAI_API_KEY

class OpenAIAssistant:
    def __init__(self, model_name="gpt-4"):
        self.model_name = model_name

    def generate_response(self, conversation):
        client = OpenAI(api_key=OPENAI_API_KEY)

        response = client.chat.completions.create(
            model=self.model_name,
            messages=conversation,
            temperature=0,
            top_p=1,
            frequency_penalty=0,
            presence_penalty=0
        )
        return response.choices[0].message.content```

**Unittest**

import datetime
import unittest
from unittest.mock import patch, MagicMock

from openai.types.chat import ChatCompletionMessage
from openai.types.chat.chat_completion import ChatCompletion, Choice

from openai_chat import OpenAIAssistant

class TestRunGptPrompt(unittest.TestCase):

    @patch('openai_chat.OpenAIAssistant', autospec=True)
    def test_run_gpt_prompt(self, MockOpenAIAssistant):
        mock_model_config = MagicMock()
        mock_model_config.api_env_var = "OPENAI_API_KEY"
        mock_model_config.model_version = "gpt-4"
        mock_model_config.model_temperature = 0.5
        mock_model_config.output_token_limit = None
        mock_model_config.seed = None
        mock_model_config.supports_json_mode = False

        mocked_content = "This is not a question or a prompt. Could you please provide more information or context?"
        ChatCompletion(
            id="foo",
            model=mock_model_config.model_version,
            object="chat.completion",
            choices=[
                Choice(
                    finish_reason="stop",
                    index=0,
                    message=ChatCompletionMessage(
                        content=mocked_content,
                        role="assistant",
                    ),
                )
            ],
            created=int(datetime.datetime.now().timestamp()),
        )

        # Mock the OpenAIAssistant class and its generate_response method
        mock_instance = MockOpenAIAssistant.return_value
        mock_instance.generate_response.return_value = mocked_content

        # Create an instance of the OpenAIAssistant and call the generate_response method
        assistant = OpenAIAssistant()
        output = assistant.generate_response([{"role": "system", "content": "test"}])

        self.assertEqual(output, mocked_content)

if __name__ == "__main__":
    unittest.main()

Here's an example without any helper stuff, just using the raw API. Includes both basic response and streamed response mocks.
import datetime
from unittest.mock import patch

from openai.types.chat import ChatCompletionMessage
from openai.types.chat.chat_completion import ChatCompletion, Choice
from openai.types.chat.chat_completion_chunk import ChatCompletionChunk, ChoiceDelta
from openai.types.chat.chat_completion_chunk import Choice as StreamChoice

def create_chat_completion(response: str, role: str = "assistant") -> ChatCompletion:
    return ChatCompletion(
        id="foo",
        model="gpt-3.5-turbo",
        object="chat.completion",
        choices=[
            Choice(
                finish_reason="stop",
                index=0,
                message=ChatCompletionMessage(
                    content=response,
                    role=role,
                ),
            )
        ],
        created=int(datetime.datetime.now().timestamp()),
    )

@patch("openai.resources.chat.Completions.create")
def test_chat_completion(openai_create):
    from openai import OpenAI
    EXPECTED_RESPONSE = "The mock is working! ;)"
    openai_create.return_value = create_chat_completion(EXPECTED_RESPONSE)
    client = OpenAI(api_key="sk-...")
    r = client.chat.completions.create(
        messages=[{"role": "user", "content": "Do you know any jokes?"}],
        model="gpt-3.5-turbo",
    )
    response = r.choices[0].message.content
    assert response == EXPECTED_RESPONSE

def create_stream_chat_completion(response: str, role: str = "assistant"):
    for token in response:
        yield ChatCompletionChunk(
            id="foo",
            model="gpt-3.5-turbo",
            object="chat.completion.chunk",
            choices=[
                StreamChoice(
                    index=0,
                    finish_reason=None,
                    delta=ChoiceDelta(
                        content=token,
                        role=role,
                    )
                ),
            ],
            created=int(datetime.datetime.now().timestamp()),
        )

@patch("openai.resources.chat.Completions.create")
def test_stream_chat_completion(openai_create):
    from openai import OpenAI
    EXPECTED_RESPONSE = "The mock is STILL working! ;)"
    openai_create.return_value = create_stream_chat_completion(EXPECTED_RESPONSE)
    client = OpenAI(api_key="sk-...")
    stream = client.chat.completions.create(
        messages=[{"role": "user", "content": "Do you know any jokes?"}],
        model="gpt-3.5-turbo",
        stream=True,
    )

    response = ""
    chunk_count = 0
    for chunk in stream:
        response += (chunk.choices[0].delta.content or "")
        chunk_count += 1
    assert response == EXPECTED_RESPONSE
    assert chunk_count == len(EXPECTED_RESPONSE)

Dude, thanks, I spent hours yesterday trying to mock one of the endpoints through client.chat and couldn't figure out why it was working until I saw you do this through openai.resources.chat. Thank you so much!

If it's helpful for anyone else, I just made mocks for the Async Azure versions, using pytest monkeypatch instead of mock.patch:
https://github.com/pamelafox/chatgpt-backend-fastapi/blob/main/tests/conftest.py


Constitution does not go back down after unequipping amulet with constitution stat (1.16.5 forge)

as shown in this video you can repeatedly unequip and equip the constitution amulet and get seemingly infinite health
https://user-images.githubusercontent.com/92835818/189213731-4e7c6f11-e7d9-40cc-8ca3-788147e61271.mp4

Hi there,
This release is now deprecated and unsupported.
Thanks.