// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. import 'package:analyzer/instrumentation/noop_service.dart'; import 'package:analyzer/instrumentation/plugin_data.dart'; /// The interface used by client code to communicate with an instrumentation /// service of some kind. abstract class InstrumentationService { /// A service which does not log or otherwise record instrumentation. static final NULL_SERVICE = NoopInstrumentationService(); /// Log the fact that an error, described by the given [message], has occurred. void logError(String message); /// Log that the given non-priority [exception] was thrown, with the given /// [stackTrace]. void logException( Object exception, [ StackTrace? stackTrace, List? attachments, ]); /// Log unstructured text information for debugging purposes. void logInfo(String message, [dynamic exception]); /// Log that a log entry that was written to the analysis engine's log. The log /// entry has the given [level] and [message], and was created at the given /// [time]. void logLogEntry(String level, DateTime time, String message, Object exception, StackTrace stackTrace); /// Log that a notification has been sent to the client. void logNotification(String notification); /// Log the fact that an error, described by the given [message], was reported /// by the given [plugin]. void logPluginError( PluginData plugin, String code, String message, String stackTrace); /// Log that the given non-priority [exception] was thrown, with the given /// [stackTrace] by the given [plugin]. void logPluginException( PluginData plugin, Object exception, StackTrace? stackTrace); /// Log a notification from the plugin with the given [pluginId]. void logPluginNotification(String pluginId, String notification); /// Log a request to the plugin with the given [pluginId]. void logPluginRequest(String pluginId, String request); /// Log a response from the plugin with the given [pluginId]. void logPluginResponse(String pluginId, String response); /// Log that the given [plugin] took too long to execute the given [request]. /// This doesn't necessarily imply that there is a problem with the plugin, /// only that this particular response was not included in the data returned /// to the client. void logPluginTimeout(PluginData plugin, String request); /// Log that a request has been sent to the client. void logRequest(String request); /// Log that a response has been sent to the client. void logResponse(String response); /// Signal that the client has started analysis server. /// This method should be invoked exactly one time. void logVersion(String uuid, String clientId, String clientVersion, String serverVersion, String sdkVersion); /// Log that the file system watcher sent an event. The [folderPath] is the /// path to the folder containing the changed file, the [filePath] is the path /// of the file that changed, and the [changeType] indicates what kind of /// change occurred. void logWatchEvent(String folderPath, String filePath, String changeType); /// Shut down this service. Future shutdown(); } /// The additional attachment to be logged. class InstrumentationServiceAttachment { final String id; final String stringValue; /// Create a new attachment with the unique [id] and string [value]. InstrumentationServiceAttachment.string({ required this.id, required String value, }) : stringValue = value; }