vunet_flutter_plugin 0.0.1
vunet_flutter_plugin: ^0.0.1 copied to clipboard
A Flutter plugin from VunetSystems for Mobile Real User Monitoring.
Changelog #
0.0.1 #
Fixed #
- Removed the
_TrackedHttpClientwarning that fired whenHttpOverrides.currentwas notTrackedHttpOverrides. It ran on already tracked clients (false alarm) and never on newHttpClient()s created afterHttpOverrides.globalwas replaced (the actual miss). Install custom overrides beforeVuTelemetry.initialize(). TrackedHttpOverridesnow forwardsHttpClientandHttpClientRequestproperty writes to the inner client. Timeouts, User-Agent,autoUncompress, andpackage:httpContent-Length/persistentConnectionwere previously stored only on the wrapper and silently ignored.- HTTP client spans from
instrumentations.http: true+http.Client()now record thedownloadphase. Response metadata getters used to end the span on a microtask beforepackage:httplistened to the body; a cancelable timer now waits forlisten()(or closes unread-body spans without inflating duration). - Chained
HttpOverridesnow keep DNS/connect timing.TrackedHttpOverridesinstalls the instrumentedconnectionFactoryon the prior override's client instead of wrapping it without connect instrumentation. - HTTP client spans are no longer lost when the response body is discarded with
drain()(or anyStreamSubscription.asFutureuse).asFutureoverwrites the subscription'sonDone, which replaced the handler that ends the span, so the span never closed and never exported. The end hook now sits on an internal subscription the caller cannot overwrite, and a body abandoned part-way through (subscription cancelled) also closes its span. - A
connectionFactoryassigned to theHttpClientthe SDK hands out is no longer dropped.connectionFactoryis set-only, so the assignment used to replace the instrumented factory and silently end connect timing; the two are now composed — the app's factory does the connecting and timing is still recorded. Clearing it (null) restores the SDK's self-connecting factory. OtelDioInterceptorno longer copies and stringifies every request and response header on each call. The maps are built only whencaptureRequestHeaders/captureResponseHeadersare non-empty; previously they were built and then discarded under the default empty allowlists.- Transport failures (no HTTP response received) now report
http.response.status_code = 0so they can be distinguished from 4xx/5xx responses. A status already set byapplyResponseis never overwritten. - Frame jank monitoring no longer resolves the current screen or starts the aggregation timer until a slow/frozen frame is observed.
- A replacement outermost
Navigator(auth gate, keyedMaterialApprebuild) now reportsnavigation.transition.type = app_initializationfor its first route. The label previously followed_hasEverEmitted, so a depth-0 landing after anything had already emitted was taggednested_initialization. screen.nameno longer drops back to the enclosing page when a nestedNavigator's observers are re-attached — an inlineRouteObserverService.nested()recreated on rebuild, or aGlobalKeyreparenting that moves it under a new ancestor.NavigatorObserver.navigatoris cleared byNavigatorState.deactivate, not only by disposal, so it was never a liveness flag; per-navigator state is now keyed on the liveNavigatorStateand retired when that unmounts.pushAndRemoveUntilnow reportsnavigation.transition.type = push. Flutter drains route additions before deletions, so the removals were relabelling the push as apop— inverting every login / onboarding-completion transition.tab_switchspans from aVuIndexScopewithfoldIntoScreenName: falsenow report the branch the user left asnavigation.source.nameinstead of repeating the destination.- A shell that builds its branches on demand now emits a
nested_initializationfor each branch as it appears. Suppression of hiddenIndexedStacksiblings is scoped to the frame rather than to the emit-coalescing window, which every emit refreshed. screen.nameno longer picks a hidden branch when aVisibility(visible: true)sits between that branch and the shell that hides it.screen.nameno longer stays on a nested branch when a rootPageRoutecovers the shell, and a hidden depth-2 branch can no longer outrank a visible depth-1 one.- Reading navigation state no longer registers an
InheritedWidgetdependency from every nestedNavigator, which made them rebuild on unrelated route changes. - A
VuTelemetry.logTabChangecall with no accompanyingsetStatenow completes and exports its span instead of leaving it open. VuTelemetry.logTabChangewith per-destination labels (dynamic titles) no longer grows a controller-driven group's label list without bound.- Dropped an unread
SharedPreferenceswrite from every route change (it also fanned out to every nested navigator, hidden branches included).
Added #
- Flutter
image.loadinstrumentation (Android Glide/Coil parity): opt-inVuNetworkImage/VuImage.networkin core, plus sibling packagevunet_flutter_plugin_cached_network_imageforcached_network_image/flutter_cache_manager(VuInstrumentedCacheManager,VuCachedNetworkImageProvider,VuCachedNetworkImage). Spans use scopecom.vunetsystems.rum.flutter.imagewith attrsimage.url(query stripped),image.source,image.load.status, and optionalimage.model_type; network path emits a child HTTPGETunder the image span.
Changed #
- HTTP client phase timings (
dns_ms,connect_ms,ttfb_ms,download_ms,total_ms, and eventduration_ms) are now floating-point milliseconds, so a 0.4 ms hop is recorded as0.4rather than truncated to0or omitted. Unmeasured phases (pooled connect, download that never started) stay omitted. - Added
InitializationParams.httpConnectionFactory, plus theHttpConnectionFactorytypedef it takes (exported from bothflutter_sdk.dartandhttp_instrumentation.dart). AconnectionFactoryinstalled inside a priorHttpOverrides'createHttpClientcannot be read back (the property is set-only), soTrackedHttpOverridesreplaces it and custom pooling / proxying / mTLS is lost. Supply it here (or viaTrackedHttpOverrides.install(connectionFactory:)) and it is composed with connect timing instead. Only the combinedconnectphase is reported then —dnsis unavailable, since the lookup happens inside the supplied factory. - Added
HttpSpanRecorder.capturesRequestHeaders/capturesResponseHeaderstohttp_instrumentation.dart. Custom adapters can check them before building a header map, since the allowlist is read at call time and empty by default. - Nested-navigator docs now show a
State-heldRouteObserverService.nested()instead of one allocated inline inbuild. - Documented W3C Trace Context Level 1 as the HTTP propagation contract:
inject always uses
traceparentversion00. - Added SDK developer logging controls via
InitializationParams.logLevelwithSdkLogLevel.infoas the default.SdkLogLevel.debugnow emits lifecycle, HTTP, navigation, error, and frame-monitoring diagnostics from the Flutter layer. app.jankframe monitoring now uses display refresh-rate budgets, microsecond-precision comparisons, per-windowtotal_frames/ jank rates, separate slow vs frozen and build vs raster counters, and span timestamps anchored to the observed frame window (not flush time).foldIntoScreenNameis now available on every tab API, not justVuIndexScope:VuTabScope,VuTelemetry.observeTabControllerandVuTelemetry.logTabChangeall accept it (defaulttrue, unchanged behaviour). On the imperative APIs it applies to the call that first registers the group — the flag is fixed for the group's lifetime.
Breaking #
ui.navigationspans moved to anavigation.*attribute vocabulary. The observer no longer writesscreen.name,last.screen.name,screen.route, orlast.screen.route:screen.name(destination) is nownavigation.destination.name.ScreenNameSpanProcessorstill stampsscreen.nameat span start with the same destination value, but without the'unknown'fallback — when the destination widget class cannot be derived (a route that is neither aMaterialPageRoutenor aCupertinoPageRoute, or one pushed before the navigator is attached) the span now carries noscreen.namewhere it previously carried the literal"unknown".last.screen.nameis nownavigation.source.name, and the initial route's value changed from'unknown'to'app_launch'.screen.routeandlast.screen.routeare removed.navigation.destination.type/navigation.source.typecarry the route class (material/cupertino/page/unknown), not the route path, so dashboards groupingui.navigationby route path lose that data unless a router integration supplies it.vunet_flutter_plugin_go_routerdoes: it writes the matched path pattern tonavigation.destination.route/navigation.source.routeand the concrete path (query stripped) tonavigation.destination.uri/navigation.source.uri. The core observer cannot — aNavigatordoes not know its own path patterns — so those four attributes are absent, notunknown, without an integration. Spans also gainednavigation.transition.type,navigation.entry.type,navigation.trigger,navigation.is_initial,navigation.duration_ms,navigation.ttid_ms, andnavigation.transition.completed.
- Removed the
shared_preferencesdependency — nothing in the SDK reads it any more. Apps that were picking it up transitively must declare it themselves. - Renamed
VuTelemetry.logClickEventtoVuTelemetry.logInteraction; the signal covers gestures and value changes, not only clicks. No alias is kept — call sites must be updated. ui.interactionspans no longer emitevent.name. The first argument toVuTelemetry.logInteractionis now the widget acted on and is emitted asapp.widget.name(blank values fall back tounknown). Backend queries keyed onevent.namestop working and need coordinated updates.ui.interactionspans now always carryapp.widget.source(flutter) andinteraction.type.interaction.typecomes from the new optionallogInteraction(interactionType:)parameter, defaulting toInteractionTypes.tap; theInteractionTypesvocabulary (tap,gesture,value_change,menu,menu_item) is exported fromflutter_sdk.dartand mirrors the native iOS SDK. Entries inattributescan no longer override these three keys.app.widget.name/app.widget.sourcedeliberately differ from the native iOS spelling (element.name/ui.framework) for the sameui.interactionspan name. Backend queries must branch by platform until one spelling wins.logInteractionno longer writesscreen.nameitself.ScreenNameSpanProcessorstill stamps it at span start (native does not add it to spans bridged from Flutter), but the'unknown'fallback is gone: an interaction fired before the first route resolves now emits noscreen.namewhere it previously emitted the literal"unknown". Queries filtering or grouping on that literal change behaviour. Precedence also flips — ascreen.namepassed inattributesnow overrides the processor instead of being discarded.- HTTP spans no longer write
screen.namethemselves.ScreenNameSpanProcessorstill stamps it at span start, but the'unknown'fallback is gone: a request before the first route resolves now emits noscreen.namewhere it previously emitted the literal"unknown". ThescreenNameargument was removed fromHttpSpanRecorder.start. - Moved Dio instrumentation (
OtelDioInterceptor,attachInstrumentedDio) out ofvunet_flutter_plugininto the sibling packagevunet_flutter_plugin_dio. Apps that use Dio must add that dependency and importpackage:vunet_flutter_plugin_dio/vunet_flutter_plugin_dio.dart. The harddiodependency was removed from core. - Added
package:vunet_flutter_plugin/http_instrumentation.dartfor official HTTP client integrations and advanced custom adapters (HttpSpanRecorder, timing helpers,InstrumentationScopes). App code should continue to useflutter_sdk.dart. - Replaced
InitializationParams.enableSlowFrameTrackingwithinstrumentations.jankDetectionon nestedInstrumentationsConfig. Also gates auto-install of error handlers (errors) andTrackedHttpOverrides(http). Navigation and Dio remain app-wired. - Renamed Flutter RUM instrumentation scopes to
com.vunetsystems.rum.flutter.*(e.g. HTTP →...http, Dio →...http.dio, custom action →...custom.action). Backends that filter oninstrumentationScope.namemust update queries. - Removed legacy Flutter
anr-instrumentation/freezeDetectedspan emission (native SDK owns ANR/jank). - RUM tracers now set instrumentation scope
versionto the plugin version. - Custom actions: use
VuTelemetry.action.startAction/withAction(wasVuAction.startAction/withAction).VuActionremains the handle type. - Error spans share scope
com.vunetsystems.rum.flutter.errorswith distinct names (flutter.ui.error,flutter.platform.error,flutter.custom.error) anderror.source. Only custom errors are app-facing viaVuTelemetry.error.record(...); UI/platform capture is SDK-internal.
0.18.6 - 2024-08-15 #
Merged pull requests:
- Make registerGlobalContextManager public API #183 (jonathancampbell-wk)
- O11Y-4831: Use test URL in test #181 (kennytrytek-wf)
0.18.5 - 2024-08-01 #
Merged pull requests:
- PPI-165 : fix timestamp rounding issues and expose helpers for high res timestamps #179 (blakeroberts-wk)
- update changelog #178 (blakeroberts-wk)
0.18.4 - 2024-07-18 #
Closed issues:
- [Question] What is correct way to call Context.current.span now? #173
- RecordException doesn't capture Exception as Event #152
Merged pull requests:
- add cross-cutting context api functions #176 (blakeroberts-wk)
- Update CODEOWNERS #175 (tylerrinnan-wf)
- Exception as event #160 (mikebosland)
- Improve pub.flutter-io.cn PUB POINTS 100->130 #159 (mikebosland)
0.18.3 - 2024-05-23 #
Closed issues:
- I can't find
withContextandsetSpanfrom README #162
Merged pull requests:
- O11Y-4632 Release 0.18.3 #171 (changliu-wk)
- O11Y-4623: Update Context API examples in opentelemetry-dart README #170 (michaelyeager-wf)
- O11Y-4010: Add ContextManager for Context #167 (changliu-wk)
- Replace mockito with mocktail #165 (sourcegraph-wk)
- Update GHA publishing steps #164 (michaelyeager-wf)
- Allow a custom time provider in TracerProviderBase #158 (mikebosland)
- Allow custom timestamps to be used on Span.end() #115 (rafaelring)
0.18.2 - 2024-04-01 #
Closed issues:
- PreFlight request support #154
Merged pull requests:
- expose sdk.Attributes #157 (yuzurihaaa)
- O11Y-4317: update generated mocks and format project #155 (blakeroberts-wk)
- O11Y-4273: Version Bump #151 (kennytrytek-wf)
- O11Y-4278: Add publishing note #149 (kennytrytek-wf)
0.18.1 - 2024-02-26 #
Closed issues:
Merged pull requests:
- Show log and keep running on export failure #148 (tapih)
- Bump the pub group with 1 update #145 (dependabot[bot])
0.18.0 - 2024-01-18 #
Closed issues:
- Support for Events? #116
Merged pull requests:
- Bump the pub group with 2 updates #144 (dependabot[bot])
- Bump the pub group with 1 update #143 (dependabot[bot])
- O11Y-3814: version bump #141 (kennytrytek-wf)
- O11Y-3814: Support Dart 2 and Dart 3 #140 (kennytrytek-wf)
- O11Y-3736: opentelemetry-dart: Deprecate MeterSharedState #139 (michaelyeager-wf)
- O11Y-3733: opentelemetry-dart: Implement Improvements to Timer in BatchSpanProcessor #137 (michaelyeager-wf)
- Implemented Span.addEvent and added tests for it #136 (baskillen)
- Bump the github-actions group with 1 update #132 (dependabot[bot])
0.17.0 - 2023-11-10 #
Merged pull requests:
- opentelemetry-dart 0.17.0 #135 (michaelyeager-wf)
- O11Y-3369: Migrate opentelemetry-dart to GHA #134 (michaelyeager-wf)
- Bump the pub group with 1 update #133 (dependabot[bot])
- Dart 2.19 #131 (sourcegraph-wk)
- O11Y-3369: Migrate opentelemetry-dart to GHA #126 (michaelyeager-wf)
- O11Y-3138: Update deprecation messages #122 (michaelyeager-wf)
- Rollout Analyzer 5 #120 (sourcegraph-wk)
- O11Y-3138: Improve Adherence to Specification #118 (michaelyeager-wf)
0.16.2 - 2023-07-11 #
0.16.1 - 2023-05-25 #
Merged pull requests:
- Add dependency for meta to pubspec.yaml #111 (michaelyeager-wf)
0.16.0 - 2023-05-25 #
Closed issues:
- MeterProvider doesn't yet support resources #87
Merged pull requests:
- Move W3CTraceContextPropagator to API package #109 (michaelyeager-wf)
- O11Y-2859: Disable code coverage comments on pull requests #108 (dustinlessard-wf)
- Update dart dependencies #106 (sourcegraph-wk)
- O11Y-2792: Update action versions #105 (changliu-wk)
- Fix syntax errors in README example code. #104 (scidev20)
- Pin mockito 5 #103 (sourcegraph-wk)
- Extended exporter with a headers map for authorization #102 (v-shemet)
- O11Y-2370: Report Code Coverage on PRs #96 (dustinlessard-wf)
- O11Y-2256 : Resource can be passed into MeterProvider #90 (dustinlessard-wf)
0.14.4 - 2022-11-10 #
0.15.1 - 2022-11-08 #
Closed issues:
- We need a pull request template #82
- SDK.MetricsOptions.setUnits lack implementation #77
- MetricOptions.setDescription lacks implementation #76
Merged pull requests:
- Update http to allow 0.13.0 #91 (robbecker-wf)
- O11Y-2352 : added missing dependency #89 (dustinlessard-wf)
- New Template #84 (danrick-wk)
- O11Y-2154 : Add MeterProvider classes #78 (dustinlessard-wf)
0.15.0 - 2022-09-14 #
1.0.0 - 2022-09-13 #
Closed issues:
- Global setup code should be exposed via the api not via the sdk #80
Merged pull requests:
- O11Y-2238 moved to api #81 (danrick-wk)
0.14.3 - 2022-08-18 #
Closed issues:
- Repo lacks assets helpful to contributors #69
- Pub publishing indicates warning related to missing changelog #67
- opentelemetry-dart should expose CI results to contributors #64
Merged pull requests:
- O11Y-2149: Resolve changelog warning for publishing to public pub server #68 (dustinlessard-wf)
0.14.2 - 2022-08-17 #
Merged pull requests:
- O11Y-2150 : Opentelemetry-dart lacks assets helpful to contributors #70 (dustinlessard-wf)
0.14.1 - 2022-06-14 #
Merged pull requests:
- O11Y-1873: Adjust copyright information in OpenTelemetryDart #62 (michaelyeager-wf)
0.14.0 - 2022-06-03 #
Merged pull requests:
- Add Resource Attribute for Deployment Environment #61 (michaelyeager-wf)
0.13.0 - 2022-06-03 #
Merged pull requests:
traceshouldn't alter the return type of the function being traced #58 (jasonaguilon-wf)
0.12.1 - 2022-05-26 #
Merged pull requests:
- O11Y-1842 : commit protobuf generated code #60 (blakeroberts-wk)
0.12.0 - 2022-05-26 #
Merged pull requests:
- O11Y-1784: Tracing attributes should follow naming convention guidelines #54 (michaelyeager-wf)
0.11.1 - 2022-05-25 #
Merged pull requests:
- O11Y-1770: Add required files to opentelemetry-dart repo for OSS #51 (keruitan-wk)
0.11.0 - 2022-05-25 #
0.10.0 - 2022-05-11 #
Merged pull requests:
- O11Y-1489: Update span processors to match otel spec #59 (keruitan-wk)
0.9.4 - 2022-05-10 #
Merged pull requests:
- O11Y-1804: Update Dart Dockerfile to use new Dart image #57 (michaelyeager-wf)
0.9.3 - 2022-05-09 #
Merged pull requests:
- O11Y-1748: OpenTelemetry Dart: Implement forceFlush for SpanExporters #55 (michaelyeager-wf)
0.9.2 - 2022-05-06 #
Merged pull requests:
- Replace deprecated commands with new dart commands #49 (sourcegraph-wk)
0.9.1 - 2022-05-04 #
0.9.0 - 2022-04-29 #
Merged pull requests:
- O11Y-1749: OpenTelemetry Dart: Complete Implementation of SpanKind #50 (michaelyeager-wf)
0.8.0 - 2022-04-27 #
Merged pull requests:
- O11Y-1508: Change Span to use high resolution time instead of DateTime.now() #39 (michaelyeager-wf)
0.7.0 - 2022-04-26 #
Merged pull requests:
- O11Y-1694: move attributes and resource to sdk #47 (changliu-wk)
0.6.0 - 2022-04-18 #
0.5.0 - 2022-04-15 #
Merged pull requests:
- O11Y-1665: Stub out remaining interface methods in opentelemetry-dart #43 (michaelyeager-wf)
0.4.1 - 2022-04-14 #
0.4.0 - 2022-04-13 #
Merged pull requests:
- O11Y-1631: add SpanLimits, implement maxNumAttributes and maxNumAttributeLength #42 (changliu-wk)
0.3.0 - 2022-04-13 #
Merged pull requests:
- O11Y-1679: Move Tracer.trace out of Tracer class/interface #44 (michaelyeager-wf)
0.2.0 - 2022-03-11 #
Merged pull requests:
- O11Y-1504: wo11y-dart tracer.trace spans don't end until the parent span ends #41 (michaelyeager-wf)
0.1.21 - 2022-02-24 #
0.1.20 - 2022-02-24 #
Merged pull requests:
- O11Y-1528 : update sdk to use api where possible #36 (blakeroberts-wk)
0.1.19 - 2022-02-24 #
Merged pull requests:
- Temporarily disable the mockito builder for better build perf #38 (sourcegraph-wk)
0.1.18 - 2022-01-12 #
0.1.17 - 2022-01-06 #
Merged pull requests:
- O11Y-1356: Add trace() helper for opentelemetry dart #34 (michaelyeager-wf)
0.1.16 - 2021-12-20 #
Merged pull requests:
- O11Y-1293 : include span attributes in collector exporter #32 (blakeroberts-wk)
0.1.15 - 2021-12-17 #
0.1.14 - 2021-12-10 #
0.1.13 - 2021-11-22 #
0.1.12 - 2021-11-16 #
0.1.11 - 2021-11-15 #
0.1.10 - 2021-11-15 #
0.1.9 - 2021-11-11 #
0.1.8 - 2021-11-01 #
0.1.7 - 2021-10-28 #
0.1.6 - 2021-10-28 #
0.1.5 - 2021-10-21 #
Merged pull requests:
- O11Y-1045: opentelemetry-dart must manage different contexts for async code #19 (michaelyeager-wf)
0.1.4 - 2021-10-06 #
Merged pull requests:
- Pin protoc_plugin to 19.3.1 to account for SDK 2.11 #18 (tylersnavely-wf)
0.1.3 - 2021-10-05 #
Merged pull requests:
- O11Y-1208: Direct commit release version #17 (tylersnavely-wf)
- O11Y-1208: Release every pull #15 (tylersnavely-wf)
0.1.2 - 2021-10-04 #
Merged pull requests:
- O11Y-1208: Set pubspec.yaml version automatically #14 (tylersnavely-wf)
0.1.1 - 2021-10-04 #
0.1.0 - 2021-10-01 #
Merged pull requests:
- O11Y-1019: Inject and Extract context from a message to feed into span creation #12 (michaelyeager-wf)
- Raise the Dart SDK minimum to at least 2.11.0 #11 (sourcegraph-wk)
- O11Y-994: OTEL Dart: Implement Tracer Provider API #10 (michaelyeager-wf)
- O11Y-989: Functionality to set attributes on spans #3 (michaelyeager-wf)
0.0.2 - 2021-08-27 #
Merged pull requests:
- Fix release validation errors #8 (tylersnavely-wf)
0.0.1 (2021-08-27) #
Merged pull requests:
- O11Y-1062: Create version 0.0.1 #7 (tylersnavely-wf)
- O11Y-992: OTEL Dart: Implement OTLP HTTP Reporter #6 (tylersnavely-wf)
- O11Y-990: Set span status #5 (michaelyeager-wf)
- O11Y-993: OTEL Dart: Implement OTLP Console Reporter #4 (tylersnavely-wf)
- O11Y-988: Record Spans #2 (tylersnavely-wf)
- Initial branch #1 (tylersnavely-wf)
* This Changelog was automatically generated by github_changelog_generator