-
Notifications
You must be signed in to change notification settings - Fork 14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Use User-Agent
header to have analytics
#150
Comments
FYI @meilisearch/product-team |
Overwrite initial user-agentUser-agent may already contain some content. For example when making a request from my browser, the back-end server receives the following
Unfortunately, I can not append new content to the end of the user-agent. Meaning that if I need to send Code example:Front end request:let myHeaders = new Headers();
myHeaders.append('user-agent', 'MeiliSearch JS (v0.22.1)');
fetch('/test', {
headers: myHeaders
}).then(res => console.log(res)) Back-end receiverapp.get('/test', (req, res) => {
console.log(req.headers["user-agent"])
}) The console.log will output Unable to modify user-agent in chromeNow, this is an unfortunate problem. It has not yet been implemented in chromium based browsers (thus chrome also). See issue dating from 2015. Meaning that the above code sample results in chrome silently ignoring my user-agent update thus returning the original user-agent:
These tests have been done with the standard library const xhttp = new XMLHttpRequest();
xhttp.onload = function() {
console.log(this.responseText)
}
xhttp.open("GET", "/test", true);
xhttp.setRequestHeader('user-agent', "plouf") // Refused to set unsafe header "user-agent"
xhttp.send(); ConclusionDo we want to keep the context of the browser? If yes, then we cannot implement this feature. Do we accept to lose the context? What about chrome |
Hi @bidoubiwa! Thank you for this complete and accurate feedback. If I understand correctly, it's mostly languages running on Chrome that won't be able to send their User-Agent using the conforming header. The solution could be to ask for a custom user-agent, we would like to avoid it for several reasons. It is possible that some HTTP clients will encounter problems by not being able to override the user-agent. It is also possible that some proxies will remove a custom header by default. In the vast majority of cases, I have the impression that we won't have the information about the use of js SDKs via chrome. Am I wrong? If so, we can make the assumption that it is the most used. There is no real need to know if it should be maintained or prioritized in my opinion but you tell me. The idea behind this, if I'm not mistaken @curquiza, was to know to what extent we should prioritize efforts on SDKs that probably wouldn't be used. |
After the discussion with @bidoubiwa and @gmourier We keep The problem on Chrome we have for front-end is still present and should be solved in the future, for example by sending the analytics information as query parameters. We need first to ensure the first implementation we've done works. TLDR; |
I agree with the proposal. Even without the information from chrome we still at least receive some information :) |
No need to add whitespaces to compute it. On the core side, we separate User-Agent with |
Yes we split the user-agent on the |
129: Feature/Analytics r=brunoocasali a=brunoocasali - Expose headers method - Create a `Version` class to easily access package version data. - Add `Version.qualifiedVersion` to headers After the implementation the MeiliSearch server is outputting the expected 💯 `[2022-01-19T18:33:47Z INFO actix_web::middleware::logger] 172.17.0.1:57704 "GET /keys HTTP/1.1" 200 14 "-" "MeiliSearch Dart (v0.5.0)" 0.000118` _DISCLAIMER:_ I've tried other ways to collect these data eg. - Reading from pubspec.yaml: - This is not supported by dart native and flutter in the same way. - Generating the version class dynamically: - Due to the time constraint I was not able to do this, actually, I don’t know for sure if this is going to work exactly the same way as it is now. Add dart support as requested here meilisearch/integration-guides#150 Co-authored-by: Bruno Casali <brunoocasali@gmail.com>
292: Feature/Analytics r=brunoocasali a=brunoocasali - Add `User-Agent` inside the pre-defined headers Add ruby support as requested here meilisearch/integration-guides#150 Co-authored-by: Bruno Casali <brunoocasali@gmail.com>
292: Feature/Analytics r=brunoocasali a=brunoocasali - Add `User-Agent` inside the pre-defined headers Add ruby support as requested here meilisearch/integration-guides#150 Co-authored-by: Bruno Casali <brunoocasali@gmail.com>
233: Feature/Analytics r=brunoocasali a=brunoocasali - Create the `Version` class - Load the current version from the csproj data through the `GetType>Assembly>GetName>Version` (I don’t really know if this could have some potential of not working in some cases, let me know that). > The Github Action for some reason stopped working, I fixed the version of the .net in order to fix the problem. Related to meilisearch/integration-guides#150 Co-authored-by: Bruno Casali <brunoocasali@gmail.com>
293: Add a func to main class with qualified version r=alallema a=brunoocasali - Add a function to respond with the full qualified version for the PHP SDK: `"Meilisearch PHP (v0.21.0)"`. Related to meilisearch/integration-guides#150 Co-authored-by: Bruno Casali <brunoocasali@gmail.com>
294: Feature/Analytics r=alallema a=brunoocasali - Add a default `User-Agent` header containing the qualified version name for this package. Related to meilisearch/integration-guides#150 Co-authored-by: Bruno Casali <brunoocasali@gmail.com>
241: Feature/Analytics r=brunoocasali a=brunoocasali - Add custom User-Agent to every HTTP call. Related to meilisearch/integration-guides#150 Co-authored-by: Bruno Casali <brunoocasali@gmail.com>
List of the qualified names used in the headers:
And:
|
Hi @brunoocasali! Thanks for the list! It seems it's missing Also, what's about Laravel Scout, Firebase, and Gatsby plugins? Could be nice to know it also! |
Oh yeah, I forgot to add them thanks for the reminder. About the Laravel, I'm not sure if we will be able to add the customization there. |
254: Feature/Analytics r=brunoocasali a=brunoocasali - Add `User-Agent` inside the pre-defined headers. Add Rust support as requested here meilisearch/integration-guides#150 Co-authored-by: Bruno Casali <brunoocasali@gmail.com>
254: Feature/Analytics r=brunoocasali a=brunoocasali - Add `User-Agent` inside the pre-defined headers. Add Rust support as requested here meilisearch/integration-guides#150 Co-authored-by: Bruno Casali <brunoocasali@gmail.com>
* Instance Options (#119) * Add instance options spec * Update text/0119-instance-options.md Co-authored-by: Guillaume Mourier <guillaume@meilisearch.com> * Update text/0119-instance-options.md Co-authored-by: Guillaume Mourier <guillaume@meilisearch.com> * Update text/0119-instance-options.md Co-authored-by: Guillaume Mourier <guillaume@meilisearch.com> * Update text/0119-instance-options.md Co-authored-by: Guillaume Mourier <guillaume@meilisearch.com> * Update text/0119-instance-options.md Co-authored-by: Guillaume Mourier <guillaume@meilisearch.com> * Update text/0119-instance-options.md Co-authored-by: Guillaume Mourier <guillaume@meilisearch.com> * Update text/0119-instance-options.md Co-authored-by: Guillaume Mourier <guillaume@meilisearch.com> * Update text/0119-instance-options.md Co-authored-by: Guillaume Mourier <guillaume@meilisearch.com> * Update text/0119-instance-options.md Co-authored-by: Guillaume Mourier <guillaume@meilisearch.com> * Numeric title + add dump options * Add link to dump spec * Update text/0119-instance-options.md Co-authored-by: Guillaume Mourier <guillaume@meilisearch.com> * Update text/0119-instance-options.md Co-authored-by: Guillaume Mourier <guillaume@meilisearch.com> * Add title numerotations * Add telemetry for new options * Apply changes after the review * Update text/0119-instance-options.md * Update text/0119-instance-options.md Co-authored-by: Many <legendre.maxime.isn@gmail.com> * Update text/0119-instance-options.md Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com> * Update text/0119-instance-options.md Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com> * Change naming after the review * Update text/0034-telemetry-policies.md * Update text/0034-telemetry-policies.md * Update text/0034-telemetry-policies.md * Update text/0034-telemetry-policies.md * Apply suggestions from code review Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com> * Update text/0119-instance-options.md Co-authored-by: Clémentine Urquizar - curqui <clementine@meilisearch.com> * Update text/0119-instance-options.md Co-authored-by: Clémentine Urquizar - curqui <clementine@meilisearch.com> Co-authored-by: Guillaume Mourier <guillaume@meilisearch.com> Co-authored-by: Many <legendre.maxime.isn@gmail.com> Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com> * Settings API - v0.26.0 state (#123) * Add a Settings API specification file * Add distinct-attribute-setting-api.md * Add displayed-attributes and searchable-attributes specification file * Add stop-words setting api * Add synonyms setting api * Rename spec files and fix some typos * Add ranking rules setting api * Add filterable-attributes and sortable-attributes settings API * Add a Triggering Documents Re-Indexing technical section * Rephrase 202 Accepted Response for POST Methods * Apply Triggering Documents Re-Indexing Technical part on related sub settings * Update synonyms setting api file * Precise and rephrase some sentences * Remove bullet point title * Add limitation about manually specifying searchableAttributes * Update spec template according to our current usage (#127) * Update spec template according to our current usage * Update text/0000-specification-template.md Co-authored-by: Guillaume Mourier <guillaume@meilisearch.com> * Remove bullet point dedicated to title * Rename Technical Aspects to Technical Details Co-authored-by: Guillaume Mourier <guillaume@meilisearch.com> * Documents API (#133) * Catch-up documents api specification * Add precisions and examples * Apply suggestions from code review Co-authored-by: Many <legendre.maxime.isn@gmail.com> Co-authored-by: Many <legendre.maxime.isn@gmail.com> * Stats API (#134) * Add Stats API specification * Rename spec file with pr number * Clean typo, add precisions and fix inner linking * Apply suggestions from code review Co-authored-by: maryamsulemani97 <90181761+maryamsulemani97@users.noreply.github.com> * Change order of API endpoints Co-authored-by: maryamsulemani97 <90181761+maryamsulemani97@users.noreply.github.com> * Errors - Add variant for `invalid_filter`/`invalid_sort` when related settings are empty (#125) * Add variant for invalid_sort and invalid_filter errors when settings are empty * Update text/0061-error-format-and-definitions.md Co-authored-by: gui machiavelli <hey@guimachiavelli.com> Co-authored-by: gui machiavelli <hey@guimachiavelli.com> * Add missing "v" in the user-agent data (#136) Following the issue meilisearch/integration-guides#150 there is a "v" before the version of the package. * Indexes API (#132) * Catch-up Indexes API * Add details by field for an Index API Resource * fix typo * Add future possibilities * Apply suggestions from code review Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com> * Add precisions from review * lowercase type Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com> * Remove never-implemented and deprecated 0042-paginated-search.md (#147) * Settings API - Typo Tolerance (#117) * Draft file for Typo Tolerance specification * rename spec file * Rename specification * draft * Add open-api.yaml prototype * Add typoTolerance component on POST search * Add typoTolerance object into search api parameters * fix typos * remove the past tense * Add typoTolerance GET query parameters * Fix description * Add explanations for disableOnWords property * Update spec href * Describe indexes/:index_uid/settings/typo-tolerance endpoint * Explain why it is useful to expose typo tolerance settings at search time * Remove typoTolerance properties at search time * Add a future possiblity to change POST verb to PATCH to edit a settings partially * Sync spec with telemetry * Mark TODO on technical details and rework structure of specification * Specify properties required to false to allow partial updates * Add error definitions for typoTolerance API resource properties * Rename spec file * Restore deleted metric * Update text/0117-typo-tolerance-settings-api.md Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com> * Update text/0117-typo-tolerance-settings-api.md Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Bruno Casali <brunoocasali@gmail.com> * Replace W to w in telemtry * Apply consistency on new errors message * fix typo * Add Async Errors and Lazy Index Creation * Rename telemetry nodes * Mention case insensivity of disableOnWords parameter * Describes synchronous (type-checking) and asynchronous (business logic) errors * Add examples for minWordSizeFor1Typo and minWordSizeFor2Typos * Elaborate on examples * Remove title bullet point * Apply naming suggestions * Apply naming changes on telemetry and miss on OpenAPI * Branch typo sub-ressource to settings-api specification * Fix typo (lul) * Add Technical Details * Apply suggestions from code review Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com> * Replace minWordSizeForXTypos fields by a minWordSizeForTypos object * Update text/0034-telemetry-policies.md Co-authored-by: ad hoc <postma.marin@protonmail.com> * Apply suggestions from code review Co-authored-by: Tommy <68053732+dichotommy@users.noreply.github.com> * Remove dedicated error for type checking * Update text/0034-telemetry-policies.md Co-authored-by: Bruno Casali <brunoocasali@gmail.com> * Bring naming changes * Fix metrics name for typo_tolerance * Update text/0034-telemetry-policies.md Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com> Co-authored-by: Bruno Casali <brunoocasali@gmail.com> Co-authored-by: ad hoc <postma.marin@protonmail.com> Co-authored-by: Tommy <68053732+dichotommy@users.noreply.github.com> * Data Types - Add Nested Fields Support (#121) * Add a draft spec with nested fields flattening examples * Consitent phrasing * Fix markdown syntax * Add null section * Add Object example section * Apply suggestions from code review Co-authored-by: Clément Renault <renault.cle@gmail.com> * Rename spec file to PR id * Add special searchableAttributes default case with flattening alg * Rephrase document structure representation * Add a dotnotation section * Add dot-notation section * Update text/0121-data-types.md Co-authored-by: Quentin de Quelen <quentin@meilisearch.com> * Add Future Possibilities * Rework nested notation sections * Fix TODO and mention the . notation and all properties notation * Add a edge case section * Fix missing block code marker * Update text/0123-ranking-rules-setting-api.md Co-authored-by: Clément Renault <renault.cle@gmail.com> * Apply suggestions from code review Co-authored-by: Tommy <68053732+dichotommy@users.noreply.github.com> Co-authored-by: Clément Renault <renault.cle@gmail.com> * Fix section number * Remove unclear sentence * Remove dedicated object section Co-authored-by: Clément Renault <renault.cle@gmail.com> Co-authored-by: Quentin de Quelen <quentin@meilisearch.com> Co-authored-by: Tommy <68053732+dichotommy@users.noreply.github.com> * Search API - Formatting Search Results (#120) * Draft a revamp of the formatting search results spec * Removes formatting-search-results specification * wip * Fix links * Add precision * Update OpenAPI * Fix sentences * Add consistency * Add details and fix sentences * Fix default value in OpenAPI spec * Add Future Possibilities for _matchesInfo * Remove bullet point title * Add wip examples * Add _formatted behavior regarding attributesToRetrieve, attributesToCrop and attributesToHighlight * Apply suggestions from code review Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com> * Fix typo * Mention no effect case of cropMarker / cropLength / highlightPostTag / highlightPreTag on attributesToCrop & attributesToHighlight * Re-explain _formatted in details * Mention Synonyms * Add precision after team feedback * Apply suggestions from code review Co-authored-by: gui machiavelli <hey@guimachiavelli.com> * Add precisions * Add boolean analytics for fields dedicated to customize formatting of search results behaviors * Precise behavior for _formatted * Add clearer explanations for the cropping algorithm and the fact that it keep the phrase context when extending around * Apply suggestions from code review Co-authored-by: Many <legendre.maxime.isn@gmail.com> Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com> Co-authored-by: Tommy <68053732+dichotommy@users.noreply.github.com> * Precise highlighting around every matched query term * Apply suggestions from code review Co-authored-by: gui machiavelli <hey@guimachiavelli.com> Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com> * Precise cropLength behavior when 0 is specified * Remove filter-and-facet-behavior spec to merge it into search-api, and correct some types description * Improve formatted spec (#146) * Improve formatted spec * Update text/0118-search-api.md Co-authored-by: Tamo <irevoire@protonmail.ch> * Update text/0118-search-api.md Co-authored-by: Tamo <irevoire@protonmail.ch> * Update text/0118-search-api.md Co-authored-by: Tamo <irevoire@protonmail.ch> * Update text/0118-search-api.md Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com> * Update text/0118-search-api.md Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com> * Improve according to reviews Co-authored-by: Tamo <irevoire@protonmail.ch> Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com> * Add missing precision for highlightPostTag * fix broken links Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com> Co-authored-by: gui machiavelli <hey@guimachiavelli.com> Co-authored-by: Many <legendre.maxime.isn@gmail.com> Co-authored-by: Tommy <68053732+dichotommy@users.noreply.github.com> Co-authored-by: Clémentine Urquizar - curqui <clementine@meilisearch.com> Co-authored-by: Tamo <irevoire@protonmail.ch> * Bump API to v0.27.0 version Co-authored-by: Clémentine Urquizar - curqui <clementine@meilisearch.com> Co-authored-by: Many <legendre.maxime.isn@gmail.com> Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com> Co-authored-by: maryamsulemani97 <90181761+maryamsulemani97@users.noreply.github.com> Co-authored-by: gui machiavelli <hey@guimachiavelli.com> Co-authored-by: Bruno Casali <brunoocasali@gmail.com> Co-authored-by: ad hoc <postma.marin@protonmail.com> Co-authored-by: Tommy <68053732+dichotommy@users.noreply.github.com> Co-authored-by: Clément Renault <renault.cle@gmail.com> Co-authored-by: Quentin de Quelen <quentin@meilisearch.com> Co-authored-by: Tamo <irevoire@protonmail.ch>
354: Support custom agents r=brunoocasali a=brunoocasali Related to meilisearch/integration-guides#150 take #2 We will use this door to send information from the Rails gem. Co-authored-by: Bruno Casali <brunoocasali@gmail.com>
179: Feature/Analytics r=brunoocasali a=brunoocasali Merge after meilisearch/meilisearch-ruby#354 With both PRs, we can send a custom header with the name of this gem according to meilisearch/integration-guides#150. Co-authored-by: Bruno Casali <brunoocasali@gmail.com>
369: Add the ability to provide extra custom user-agents r=brunoocasali a=brunoocasali Related to meilisearch/integration-guides#150 Co-authored-by: Bruno Casali <brunoocasali@gmail.com>
I'm adding the missing docs-scraper repo |
771: Adding a header parameters to the client constructor r=alallema a=alallema To enable and facilitate the integration of a user-agent into all SDKs. [see related issue](meilisearch/integration-guides#150) and specifically for [the docs-scraper integration](meilisearch/docs-scraper#387) a new parameter client_agent is now available in the client constructor. Co-authored-by: alallema <amelie@meilisearch.com> Co-authored-by: Amélie <alallema@users.noreply.github.com> Co-authored-by: Paul Sanders <psanders1@gmail.com>
We fuck*n made it, team. You're the best! 🎉🎉🎉 |
Replaces: #58
Currently, we have no analytics about integrations.
As a first step, we would like to know the proportion of each integration.
Thanks to the new spec implementation, the
User-Agent
header will be sent to Segment (and then to Amplitude) via the MeiliSearch server 🎉Here is the expected format:
-> The version should be in parenthesis and the information must start with
Meilisearch
Ex:
If multiple integrations are used during the user path, they should be separated by
;
.-> In this example, it means the Ruby SDK should be able to accept a custom
User-Agent
that the Rails plugin can pass when initializing the Ruby client.First step: do it basically in all the SDKs
The SDKs should send the expected
User-Agent
header. In this step, no need to implement a way to pass a customUser-Agent
header.We only need to find a smart way (if possible) to pass the version, and/or to check the version is well updated for each release (using the
.github/script/check-release.sh
script for example)Second step: do it in every integration
This step involves some SDKs (JS, PHP, Ruby, and probably more in the future) that can accept a custom
User-Agent
header. This needs an internal discussion for implementation and, why not, might deserve another issue.The text was updated successfully, but these errors were encountered: