Stellate Product Updates logo
Back to Homepage Subscribe to Updates

Product Updates

See the latest new features, improvements, and product updates

Labels

  • All Posts
  • Fix
  • Announcement
  • Improvement
  • graph api
  • feature

Jump to Month

  • December 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • March 2023
  • January 2023
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
feature
a year ago

Theoretical max cache hit rate

Introducing our theoretical cache hit rate: a powerful tool to help understand the maximum achievable cache hit rate for a particular operation, factoring in all possible variable and scope combinations.

Consider an operation that has been requested 1,000 times within the past 24 hours. If there is only a single unique combination of variables and scopes for this operation, and we set a max-age of 24 hours, we would encounter a single cache miss. This leads to a remarkable 999 cache hits. Therefore, the theoretical maximum cache hit rate would be 99.9%, calculated as 999/1000.

A good example of such an operation might be a posts query for a blog, which typically has consistent variables and scopes.

Contrast this with an operation with higher variable diversity, such as a search query. For 1,000 requests, we might observe 800 unique variable combinations. In this scenario, Stellate will cache 800 requests upon their first encounter. This could result in up to 200 cache hits, yielding a theoretical maximum cache hit rate of 20%.

We are delighted to announce that this insightful feature is now readily available in the operations view for all services! Please explore its potential to optimize your caching strategies.

Avatar of authorTim Suchanek
Improvement
a year ago

Improvements to Our Requests Metrics Page

We just released a whole bunch of improvements for our requests page! We focused on bringing more clarity and transparency into how we present the data.

Going into the requests view now, the first thing you will notice is that we can now show different Cache Pass reasons and filter these out. This allows you to do things like filtering out non-GraphQL requests or focusing on queries that were a pass ("Prevented by Cache Rules") to discover new caching opportunities.

Additional request metadata

We also exposed more metadata fields from the request. Now you’ll be able to see:

  • The raw user agent string
  • HTTP status code
  • Original and cached response latency (this allows you to see how much faster cached responses are).
  • Scopes
  • Types and Fields

Metadata information about a GraphQL request that was a cache HIT

More context on Non-GraphQL requests and non-cacheable operations

We are explicitly calling out non-GraphQL requests, previously we showed these as "unkown query" which didn't indicate these were non-GraphQL. We are also showing explicit pass reasons for errors and mutations.


We hope all of these improvements make inspecting and debugging requests easier!

Avatar of authorVictor Tortolero
Improvement
2 years ago

Caching the introspection query

We're excited to announce a much-requested feature upgrade that we believe will significantly enhance your experience with our Stellate service. We're now providing the ability to cache introspection queries.

Here's how it works:

We have introduced a new configuration option: cacheIntrospection. This option allows you to set whether or not you want your introspection queries cached. You simply have to assign a boolean value to this option - true for enabling caching and false for disabling it.

Once enabled, your introspections will be cached for a duration of one hour, with a stale-while-revalidate policy of one day. This means your queries will be instantly available for an hour, and even after that, the old data will still be served while the cache revalidates in the background, making sure your applications are never interrupted.

A key benefit of this feature is that it automatically manages cache invalidation. Whenever a new schema is pushed, the cache will be invalidated automatically, ensuring the latest data is always available.

For new Stellate service users, the cacheIntrospection option will be enabled by default in your configuration. But if you're an existing user, no worries! You can easily turn on this feature by adding cacheIntrospection: true to your config.

Avatar of authorJovi De Croock
Announcement
2 years ago

GraphQL Developer Portal

We' ve just released the GraphQL Developer Portal! We'd love to share something we've been working on with you, which is a way for you to generate a Developer Portal for your stellate API.

When leveraging this new feature we will create a new web-application that is located at `.stellate.io`, you can configure the branding, links, ... of this app. Here you can guide people so they can get to know your API.

If your origin API does not leverage authentication the developer portal can facilitate that by toggling `auth` on. This will allow consumers of your API to log in and generate API-tokens which you will be able to filter on in your stellate metrics.

Try it out today by going to your service-settings and choosing developer portal or adding `devPortal: { enabled: true }` to your config.

Do you have more ideas for the developer portal? Suggest them or upvote what others have suggested.

Avatar of authorJovi De Croock
2 years ago

[Public Beta] Custom Attributes: Understand Your Users Engagement with Your GraphQL API

We're excited to announce the public beta release of Custom Attributes for Stellate's GraphQL Metrics! This new feature will give you even more control and insights into your GraphQL API usage.


New Features

- Custom Attributes: Define up to five Custom Attributes per Stellate service to track additional data points with every GraphQL request. You can use HTTP headers, cookie values, or JWT claims as Custom Attributes.

- JWT Claim Support: Extract specific JWT claims for Custom Attributes. Supported algorithms include HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES256k, ES384, RSA-PSS (PS256, PS384, PS512), and EdDSA.

- Nested Claims: Access nested JWT claims using lodash-like dotpath-notation.

- Filter Metrics: Filter your GraphQL Metrics down to specific users or groups using Custom Attributes.

- Multitenancy Support: Track metrics for individual tenants in multi-tenant applications by storing tenant identifiers as Custom Attributes.


Limitations

- You can define at most five Custom Attributes for each Stellate service.

- Custom Attribute values are limited to a maximum of 256 characters in length. Longer values will be truncated.

- Data persistence: Stored values will remain even after removing a Custom Attribute from the Stellate Configuration. Currently, there is no way to customize this behavior or remove stored data.


Documentation and Demo

- Custom Attributes Documentation

- Demo Video on Using Custom Attributes


We look forward to your feedback and can't wait to see how you leverage Custom Attributes in your projects!

Avatar of authorTim Suchanek
Improvement
2 years ago

🖥️ GraphiQL Enhancements

🚫 ESC Autocomplete Popup Control

We've stopped closing the GraphiQL dialog with the ESC key, allowing you to close the autocomplete popup without unintentionally closing the entire dialog.

📏 Resizable GraphiQL Interface

We've added the ability to resize the GraphiQL interface, giving you more control over your workspace.

📺 Full-Screen Mode on Smaller Screens

For improved usability on smaller screens, we now automatically open GraphiQL in full-screen mode.

💾 Persisted Headers & Variables

We've made it so that headers and variables in GraphiQL persist, ensuring they're still available when you return or refresh the browser.

🎯 Auto-Focus Query Editor

The query editor now auto-focuses upon opening the modal, streamlining your editing experience.

Avatar of authorTim Suchanek
Improvement
2 years ago

💻 Enhanced Config Editing Experience

🧠 Intelligent Diffing Algorithm

We've upgraded our diffing algorithm to better understand the reordering of config items. As a result, it won't show a diff for reordered items, making the editing process much smoother.

🔐 Unquoted JSON Keys

To prevent crashes in certain cases, we now unquote JSON keys in the config. This simple change will significantly improve the editor's stability.

📏 Responsive Config Editor

We've made the config editor responsive, ensuring it utilizes as much of your screen as possible. This improvement allows for a more comfortable and efficient editing experience.

🛡️ Enhanced TypeScript Validation

To guarantee high-quality configurations, we've tightened the rules to only allow correct TypeScript. This enhancement ensures that you won't accidentally store incorrect configs, providing peace of mind and a more reliable user experience.

⌨️ Submit Changes with CMD+Enter

For a more streamlined editing process, you can now submit your changes using CMD+Enter. This keyboard shortcut makes saving your work quicker and more convenient.

Avatar of authorTim Suchanek
Improvement
2 years ago

Dashboard performance & accessibility improvements

  • We improved the font-loading performance in the dashboard by pre-loading and removing some unused weights.
  • Additionally, we tuned a11y by adding alt-texts to all images, and buttons and added link names.
  • And as always, speeding up an app can be improved by fetching the data quicker!
  • We improved our fetching strategy from the metrics page as well!
Avatar of authorTim Suchanek
Improvement
2 years ago

Streamlined Purging View

Our team has worked hard to make cache purging more usable.

One-Click Cache Purging

  • We've introduced a "Purge Cache" button that allows you to easily clear the entire cache with a single click. No more tedious cache management - just click, and you're done!

Purging API Endpoint

  • To make our caching solution even more developer-friendly, we've added a purging API endpoint. This addition makes it more accessible and convenient for you to integrate cache purging into your stack.

Linked Affected Types in Purging View

  • To provide better context and make navigation easier, we now link the affected types in the purging view to the related page displaying the type. This enhancement will save you time and help you better understand your cache structure.

Direct Purge from Operations and Schema Pages

  • We've added "Purge" buttons to both the Operations and Schema pages, so you can directly access the purging view from these locations. This streamlined approach will make it even easier to manage your cache and keep your data fresh.
Avatar of authorTim Suchanek
Improvement
2 years ago

🎛️ Bring your own cache-control

We're excited to announce an improvement to the ignoreOriginCacheControl configuration option, giving you even more control over cache behavior customization!

Previously, when this option was set to false, it mainly prevented the deletion of the cache control received from your origin. However, it would still be overridden by the rules applied based on your results.

Now, setting this option to false treats the cache-control header from your origin as an additional cache rule. The system first calculates the cache-control from your stellate-config and then compares it to the cache-control header received from your origin. If your cache-control permits a shared cache, we consider the s-maxage, max-age, and stale-while-revalidate directives and choose the lowest value to optimize caching.

Furthermore, when non-cacheable directives like private, no-store, or no-cache are encountered, we will set the max-age to 0 and treat it as a cache pass.

Rest assured, if you have an undefined or truthy setting, there will be no changes.

This enhancement allows you to overwrite the cache-control header correctly, providing greater flexibility in customizing cache behavior. We hope you find this update helpful!

Avatar of authorTim Suchanek