1) Monitor D2C message per device 2) Not allow multiple monitoring job (#24)
This commit is contained in:
Родитель
44567692d2
Коммит
c36cdcb9cc
17
package.json
17
package.json
|
@ -180,34 +180,39 @@
|
|||
"group": "azure-iot-toolkit@0"
|
||||
},
|
||||
{
|
||||
"command": "azure-iot-toolkit.sendC2DMessage",
|
||||
"command": "azure-iot-toolkit.startMonitorIoTHubMessage",
|
||||
"when": "view == iotHubDevices && viewItem == device",
|
||||
"group": "azure-iot-toolkit@1"
|
||||
},
|
||||
{
|
||||
"command": "azure-iot-toolkit.startMonitorC2DMessage",
|
||||
"command": "azure-iot-toolkit.sendC2DMessage",
|
||||
"when": "view == iotHubDevices && viewItem == device",
|
||||
"group": "azure-iot-toolkit@2"
|
||||
},
|
||||
{
|
||||
"command": "azure-iot-toolkit.invokeDeviceMethod",
|
||||
"command": "azure-iot-toolkit.startMonitorC2DMessage",
|
||||
"when": "view == iotHubDevices && viewItem == device",
|
||||
"group": "azure-iot-toolkit@3"
|
||||
},
|
||||
{
|
||||
"command": "azure-iot-toolkit.getDeviceTwin",
|
||||
"command": "azure-iot-toolkit.invokeDeviceMethod",
|
||||
"when": "view == iotHubDevices && viewItem == device",
|
||||
"group": "azure-iot-toolkit@4"
|
||||
},
|
||||
{
|
||||
"command": "azure-iot-toolkit.copyDeviceConnectionString",
|
||||
"command": "azure-iot-toolkit.getDeviceTwin",
|
||||
"when": "view == iotHubDevices && viewItem == device",
|
||||
"group": "azure-iot-toolkit@5"
|
||||
},
|
||||
{
|
||||
"command": "azure-iot-toolkit.deleteDevice",
|
||||
"command": "azure-iot-toolkit.copyDeviceConnectionString",
|
||||
"when": "view == iotHubDevices && viewItem == device",
|
||||
"group": "azure-iot-toolkit@6"
|
||||
},
|
||||
{
|
||||
"command": "azure-iot-toolkit.deleteDevice",
|
||||
"when": "view == iotHubDevices && viewItem == device",
|
||||
"group": "azure-iot-toolkit@7"
|
||||
}
|
||||
],
|
||||
"editor/context": [
|
||||
|
|
|
@ -36,8 +36,8 @@ export class AzureIoTExplorer {
|
|||
this._iotHubMessageExplorer.sendD2CMessage(deviceItem);
|
||||
}
|
||||
|
||||
public startMonitorIoTHubMessage(): void {
|
||||
this._iotHubMessageExplorer.startMonitorIoTHubMessage();
|
||||
public startMonitorIoTHubMessage(deviceItem?: DeviceItem): void {
|
||||
this._iotHubMessageExplorer.startMonitorIoTHubMessage(deviceItem);
|
||||
}
|
||||
|
||||
public stopMonitorIoTHubMessage(): void {
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
import { Client as EventHubClient } from "azure-event-hubs";
|
||||
import * as vscode from "vscode";
|
||||
import { Constants } from "./constants";
|
||||
import { DeviceItem } from "./Model/DeviceItem";
|
||||
import { TelemetryClient } from "./telemetryClient";
|
||||
import { Utility } from "./utility";
|
||||
|
||||
|
@ -29,8 +30,11 @@ export class BaseExplorer {
|
|||
};
|
||||
};
|
||||
|
||||
protected printMessage(outputChannel: vscode.OutputChannel, label: string) {
|
||||
protected printMessage(outputChannel: vscode.OutputChannel, label: string, deviceItem?: DeviceItem) {
|
||||
return (message) => {
|
||||
if (deviceItem && deviceItem.deviceId !== message.annotations["iothub-connection-device-id"]) {
|
||||
return;
|
||||
}
|
||||
let config = Utility.getConfiguration();
|
||||
let showVerboseMessage = config.get<boolean>("showVerboseMessage");
|
||||
let result;
|
||||
|
@ -55,7 +59,7 @@ export class BaseExplorer {
|
|||
};
|
||||
};
|
||||
|
||||
protected startMonitor(eventHubClient: EventHubClient, label: string, consumerGroup: string) {
|
||||
protected startMonitor(eventHubClient: EventHubClient, label: string, consumerGroup: string, deviceItem?: DeviceItem) {
|
||||
if (eventHubClient) {
|
||||
eventHubClient.open()
|
||||
.then(eventHubClient.getPartitionIds.bind(eventHubClient))
|
||||
|
@ -65,7 +69,7 @@ export class BaseExplorer {
|
|||
.then((receiver) => {
|
||||
this.outputLine(label, `Created partition receiver [${partitionId}] for consumerGroup [${consumerGroup}]`);
|
||||
receiver.on("errorReceived", this.printError(this._outputChannel, label, eventHubClient));
|
||||
receiver.on("message", this.printMessage(this._outputChannel, label));
|
||||
receiver.on("message", this.printMessage(this._outputChannel, label, deviceItem));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -75,10 +79,10 @@ export class BaseExplorer {
|
|||
protected stopMonitor(eventHubClient: EventHubClient, label: string, aiEvent: string) {
|
||||
TelemetryClient.sendEvent(aiEvent);
|
||||
if (eventHubClient) {
|
||||
this.outputLine(label, Constants.MonitoringStoppedMessage);
|
||||
this.outputLine(label, "D2C monitoring stopped.");
|
||||
eventHubClient.close();
|
||||
} else {
|
||||
this.outputLine(label, "No monitor job running.");
|
||||
this.outputLine(label, "No D2C monitor job running.");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -48,8 +48,6 @@ export class Constants {
|
|||
public static EventHubAIStopMonitorEvent = "EventHub.stopMonitoring";
|
||||
public static EventHubAIMessageEvent = "EventHub.Send";
|
||||
|
||||
public static MonitoringStoppedMessage = "Monitoring stopped.";
|
||||
|
||||
public static ConnectionStringFormat = {
|
||||
[Constants.IotHubConnectionStringKey]: "HostName=<my-hostname>;SharedAccessKeyName=<my-policy>;SharedAccessKey=<my-policy-key>",
|
||||
[Constants.DeviceConnectionStringKey]: "HostName=<my-hostname>;DeviceId=<known-device-id>;SharedAccessKey=<known-device-key>",
|
||||
|
|
|
@ -25,8 +25,8 @@ export function activate(context: vscode.ExtensionContext) {
|
|||
azureIoTExplorer.sendD2CMessage(DeviceItem);
|
||||
});
|
||||
|
||||
let startMonitorIoTHubMessage = vscode.commands.registerCommand("azure-iot-toolkit.startMonitorIoTHubMessage", () => {
|
||||
azureIoTExplorer.startMonitorIoTHubMessage();
|
||||
let startMonitorIoTHubMessage = vscode.commands.registerCommand("azure-iot-toolkit.startMonitorIoTHubMessage", (DeviceItem) => {
|
||||
azureIoTExplorer.startMonitorIoTHubMessage(DeviceItem);
|
||||
});
|
||||
|
||||
let stopMonitorIoTHubMessage = vscode.commands.registerCommand("azure-iot-toolkit.stopMonitorIoTHubMessage", () => {
|
||||
|
|
|
@ -38,6 +38,11 @@ export class IotHubC2DMessageExplorer extends BaseExplorer {
|
|||
}
|
||||
|
||||
public async startMonitorC2DMessage(deviceItem?: DeviceItem) {
|
||||
if (this._deviceClient) {
|
||||
this.outputLine(Constants.IoTHubC2DMessageMonitorLabel, "There is a running job to monitor C2D message. Please stop it first.");
|
||||
return;
|
||||
}
|
||||
|
||||
let deviceConnectionString = deviceItem.connectionString ?
|
||||
deviceItem.connectionString : await Utility.getConnectionString(Constants.DeviceConnectionStringKey,
|
||||
Constants.DeviceConnectionStringTitle);
|
||||
|
@ -52,11 +57,11 @@ export class IotHubC2DMessageExplorer extends BaseExplorer {
|
|||
public stopMonitorC2DMessage(): void {
|
||||
TelemetryClient.sendEvent(Constants.IoTHubAIStopMonitorC2DEvent);
|
||||
if (this._deviceClient) {
|
||||
this.outputLine(Constants.IoTHubC2DMessageMonitorLabel, Constants.MonitoringStoppedMessage);
|
||||
this.outputLine(Constants.IoTHubC2DMessageMonitorLabel, "C2D monitoring stopped.");
|
||||
this._deviceClient.close(() => { return; });
|
||||
this._deviceClient = null;
|
||||
} else {
|
||||
this.outputLine(Constants.IoTHubC2DMessageMonitorLabel, "No monitor job running.");
|
||||
this.outputLine(Constants.IoTHubC2DMessageMonitorLabel, "No C2D monitor job running.");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -39,7 +39,12 @@ export class IoTHubMessageExplorer extends BaseExplorer {
|
|||
});
|
||||
}
|
||||
|
||||
public async startMonitorIoTHubMessage() {
|
||||
public async startMonitorIoTHubMessage(deviceItem?: DeviceItem) {
|
||||
if (this._eventHubClient) {
|
||||
this.outputLine(Constants.IoTHubMonitorLabel, "There is a running job to monitor D2C message. Please stop it first.");
|
||||
return;
|
||||
}
|
||||
|
||||
let iotHubConnectionString = await Utility.getConnectionString(Constants.IotHubConnectionStringKey, Constants.IotHubConnectionStringTitle);
|
||||
if (!iotHubConnectionString) {
|
||||
return;
|
||||
|
@ -50,9 +55,10 @@ export class IoTHubMessageExplorer extends BaseExplorer {
|
|||
try {
|
||||
this._eventHubClient = EventHubClient.fromConnectionString(iotHubConnectionString);
|
||||
this._outputChannel.show();
|
||||
this.outputLine(Constants.IoTHubMonitorLabel, `Start monitoring [${Constants.IoTHub}] ...`);
|
||||
const deviceLabel = deviceItem ? `[${deviceItem.deviceId}]` : "all devices";
|
||||
this.outputLine(Constants.IoTHubMonitorLabel, `Start monitoring D2C message for ${deviceLabel} ...`);
|
||||
TelemetryClient.sendEvent(Constants.IoTHubAIStartMonitorEvent);
|
||||
this.startMonitor(this._eventHubClient, Constants.IoTHubMonitorLabel, consumerGroup);
|
||||
this.startMonitor(this._eventHubClient, Constants.IoTHubMonitorLabel, consumerGroup, deviceItem);
|
||||
} catch (e) {
|
||||
this.outputLine(Constants.IoTHubMonitorLabel, e);
|
||||
TelemetryClient.sendEvent(Constants.IoTHubAIStartMonitorEvent, { Result: "Exception", Message: e });
|
||||
|
|
Загрузка…
Ссылка в новой задаче