1) Monitor D2C message per device 2) Not allow multiple monitoring job (#24)

This commit is contained in:
Jun Han 2017-11-07 16:19:48 +08:00 коммит произвёл GitHub
Родитель 44567692d2
Коммит c36cdcb9cc
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
7 изменённых файлов: 40 добавлений и 22 удалений

Просмотреть файл

@ -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 });