blob: 0021002aca5a0bcb3fe72cbfd9e77e1f3f881e01 [file] [log] [blame]
// 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<InstrumentationServiceAttachment>? 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<void> 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;
}