blob: 730ff88b021c7819e5639bd4dea45465fe4ae4bd [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:convert';
import 'package:logging/logging.dart';
import 'dump.dart';
import 'sl4f_client.dart';
final _log = Logger('diagnostics');
/// Generate diagnostics info using [Sl4f].
class Diagnostics {
final Sl4f _sl4f;
final Dump _dump;
/// Constructs a [Diagnostics] object.
Diagnostics(this._sl4f, [Dump dump]) : _dump = dump ?? Dump();
Future<void> dumpDiagnostics(String dumpName) async {
if (_dump.hasDumpDirectory) {
await dumpWlan(dumpName);
await dumpNetif(dumpName);
}
}
Future<void> dumpNetif(String dumpName) async {
final fileName = '$dumpName-diagnostic-net-if';
_log.info('dump net-if as $fileName');
try {
await _sl4f.request('netstack_facade.InitNetstack', {});
final result = await _sl4f.request('netstack_facade.ListInterfaces', {});
if (result == null) {
return null;
}
return _dump.writeAsBytes(
fileName, 'json', json.encode(result).codeUnits);
} on Exception catch (e) {
return _dump.writeAsString('error-$fileName', 'txt', 'error catch: $e');
}
}
Future<void> dumpWlan(String dumpName) async {
final fileName = '$dumpName-diagnostic-wlan';
_log.info('dump wlan status as $fileName');
try {
final result = await _sl4f.request('wlan.status', {});
if (result == null) {
return null;
}
return _dump.writeAsBytes(
fileName, 'json', json.encode(result).codeUnits);
} on Exception catch (e) {
return _dump.writeAsString('error-$fileName', 'txt', 'error catch: $e');
}
}
}