polling for task status.
This commit is contained in:
@@ -5,6 +5,7 @@ using FarmmapsApi.Models;
|
||||
using FarmmapsApi.Services;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using static FarmmapsApi.Extensions;
|
||||
|
||||
namespace FarmmapsApiSamples
|
||||
{
|
||||
@@ -44,30 +45,10 @@ namespace FarmmapsApiSamples
|
||||
|
||||
if (myDriveRoot != null)
|
||||
{
|
||||
// create or get a cropfield
|
||||
var cropfieldItem = await GetCreateCropfieldItem(myDriveRoot.Code);
|
||||
|
||||
// create or get target n item
|
||||
|
||||
var targetNItems = await
|
||||
_farmmapsApiService.GetItemChildrenAsync(myDriveRoot.Code, USERINPUT_ITEMTYPE);
|
||||
|
||||
Item targetNItem;
|
||||
if (targetNItems.Count == 0)
|
||||
{
|
||||
_logger.LogInformation("Creating targetN item");
|
||||
var itemRequest = CreateTargetNItemRequest(myDriveRoot.Code);
|
||||
targetNItem = await _farmmapsApiService.CreateItemAsync(itemRequest);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetNItem = targetNItems[0];
|
||||
}
|
||||
|
||||
await CalculateTargetN(cropfieldItem, targetNItem, 60);
|
||||
|
||||
|
||||
await Task.Delay(2000);
|
||||
var cropfieldItem = await GetOrCreateCropfieldItem(myDriveRoot.Code);
|
||||
var targetN = await CalculateTargetN(cropfieldItem, 60);
|
||||
|
||||
_logger.LogInformation($"TargetN: {targetN}");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -76,7 +57,7 @@ namespace FarmmapsApiSamples
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<Item> GetCreateCropfieldItem(string parentItemCode)
|
||||
private async Task<Item> GetOrCreateCropfieldItem(string parentItemCode)
|
||||
{
|
||||
var cropfieldItems = await
|
||||
_farmmapsApiService.GetItemChildrenAsync(parentItemCode, "vnd.farmmaps.itemtype.cropfield");
|
||||
@@ -101,8 +82,25 @@ namespace FarmmapsApiSamples
|
||||
return await _farmmapsApiService.CreateItemAsync(cropfieldItemRequest);
|
||||
}
|
||||
|
||||
private async Task<Item> CalculateTargetN(Item cropfieldItem, Item targetNItem, int targetYield)
|
||||
private async Task<double> CalculateTargetN(Item cropfieldItem, int targetYield)
|
||||
{
|
||||
var targetNItems = await
|
||||
_farmmapsApiService.GetItemChildrenAsync(cropfieldItem.ParentCode, USERINPUT_ITEMTYPE);
|
||||
|
||||
Item targetNItem;
|
||||
if (targetNItems.Count == 0)
|
||||
{
|
||||
_logger.LogInformation("Creating targetN item");
|
||||
var itemRequest = CreateTargetNItemRequest(cropfieldItem.ParentCode);
|
||||
targetNItem = await _farmmapsApiService.CreateItemAsync(itemRequest);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetNItem = targetNItems[0];
|
||||
}
|
||||
|
||||
_logger.LogInformation($"Calculating targetN with targetYield: {targetYield}");
|
||||
|
||||
var nbsTargetNRequest = new TaskRequest {TaskType = VRANBS_TASK};
|
||||
nbsTargetNRequest.attributes["operation"] = "targetn";
|
||||
nbsTargetNRequest.attributes["inputCode"] = targetNItem.Code;
|
||||
@@ -111,11 +109,19 @@ namespace FarmmapsApiSamples
|
||||
nbsTargetNRequest.attributes["targetYield"] = targetYield.ToString();
|
||||
string itemTaskCode = await _farmmapsApiService.QueueTaskAsync(cropfieldItem.Code, nbsTargetNRequest);
|
||||
|
||||
// poll task
|
||||
|
||||
// get target N item again
|
||||
await PollTask(TimeSpan.FromSeconds(3), async (tokenSource) =>
|
||||
{
|
||||
var itemTask = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode);
|
||||
|
||||
return targetNItem;
|
||||
if (itemTask.State != ItemTaskState.Processing && itemTask.State != ItemTaskState.Scheduled)
|
||||
tokenSource.Cancel();
|
||||
});
|
||||
|
||||
var item = await _farmmapsApiService.GetItemAsync(targetNItem.Code);
|
||||
if (item.Data.ContainsKey("TargetN"))
|
||||
return item.Data["TargetN"].Value<double>();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
private ItemRequest CreateTargetNItemRequest(string parentItemCode)
|
||||
|
Reference in New Issue
Block a user