Skip to content
This repository was archived by the owner on Feb 2, 2022. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cli/raft-tools/tools/ZAP/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"run" : {
"command" : "bash",
"arguments" : ["-c",
"sleep $RAFT_STARTUP_DELAY; cd $RAFT_TOOL_RUN_DIRECTORY; ln -s $RAFT_WORK_DIRECTORY /zap/wrk; python3 run.py install; python3 run.py" ]
"touch /.dockerenv; cd $RAFT_TOOL_RUN_DIRECTORY; ln -s $RAFT_WORK_DIRECTORY /zap/wrk; python3 run.py install; sleep $RAFT_STARTUP_DELAY; python3 run.py" ]
},
"idle" : {
"command" : "bash",
Expand Down
24 changes: 5 additions & 19 deletions cli/raft_sdk/raft_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,25 +72,6 @@ def __init__(self, context=None):
self.context['tenantId'],
self.context.get('secret'))

def result_url(self, job_id):
'''
Constructs Azure File Storage results URL

Parameters:
job_id: job ID

Returns:
URL that contains results of the job run
'''
return(
"https://ms.portal.azure.com/#blade/Microsoft_Azure_FileStorage/"
"FileShareMenuBlade/overview/storageAccountId/"
f"%2Fsubscriptions%2F{self.definitions.subscription}"
f"%2FresourceGroups%2F{self.definitions.resource_group}"
f"%2Fproviders%2FMicrosoft.Storage%2FstorageAccounts%2F"
f"{self.definitions.storage_account}/"
f"path/{job_id}/protocol/")

def job_status(self, job_id):
'''
Gets job status
Expand Down Expand Up @@ -286,6 +267,10 @@ def print_status(self, status):
for s in status:
if s['agentName'] == s['jobId']:
print(f"{s['jobId']} {s['state']}")
if s.get('utcEventTime'):
print(f'UtcEventTime: {s["utcEventTime"]}')
if s.get('resultsUrl'):
print(f'Results: {s["resultsUrl"]}')
if s.get('details'):
print("Details:")
for k in s['details']:
Expand Down Expand Up @@ -321,6 +306,7 @@ def print_status(self, status):
print("Details:")
for k in s['details']:
print(f"{k} : {s['details'][k]}")

print('======================')

def poll(self, job_id, poll_interval=10):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ type DeleteJobTests() =
let fakeMessageSender = Fixtures.createFakeMessageSender Raft.Message.ServiceBus.Queue.delete

let jobStatusJson = File.ReadAllText("test-job-status.json")
let entity = JobStatusEntity(System.Guid.Parse("29211868-8178-4e81-9b8d-d52025b4c2d4").ToString(), "testAgent", jobStatusJson, "Created")
let entity = JobStatusEntity(System.Guid.Parse("29211868-8178-4e81-9b8d-d52025b4c2d4").ToString(), "testAgent", jobStatusJson, "Created", System.DateTime.UtcNow, "http://some-url")

Raft.Utilities.raftStorage <- Fixtures.createFakeRaftStorage (Some entity)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ type GetJobStatusTests() =
member this.``GET /jobs/restler succeeds`` () =
async {
let jobStatusJson = File.ReadAllText("test-job-status.json")
let entity = JobStatusEntity(Guid.Parse("29211868-8178-4e81-9b8d-d52025b4c2d4").ToString(), "29211868-8178-4e81-9b8d-d52025b4c2d4", jobStatusJson, "Created")
let entity = JobStatusEntity(Guid.Parse("29211868-8178-4e81-9b8d-d52025b4c2d4").ToString(), "29211868-8178-4e81-9b8d-d52025b4c2d4", jobStatusJson, "Created", System.DateTime.UtcNow, "http://some-url")
Raft.Utilities.raftStorage <- Fixtures.createFakeRaftStorage (Some entity)

let jobController = jobsController(Fixtures.createFakeTelemetryClient, Fixtures.createFakeLogger<jobsController>)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ type ListJobStatusesTests() =
member this.``LIST /jobs/restler succeeds`` () =
async {
let jobStatusJson = File.ReadAllText("test-job-status.json")
let entity = JobStatusEntity(Guid.Parse("29211868-8178-4e81-9b8d-d52025b4c2d4").ToString(), "testAgent", jobStatusJson, "Created")
let entity = JobStatusEntity(Guid.Parse("29211868-8178-4e81-9b8d-d52025b4c2d4").ToString(), "testAgent", jobStatusJson, "Created", System.DateTime.UtcNow, "http://some-url")
Raft.Utilities.raftStorage <- Fixtures.createFakeRaftStorage (Some entity)

let jobController = jobsController(Fixtures.createFakeTelemetryClient, Fixtures.createFakeLogger<jobsController>)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ type jobsRePOSTTests() =
let jobId = System.Guid.NewGuid().ToString()

let jobStatusJson = File.ReadAllText("test-job-status.json")
let entity = JobStatusEntity(jobId, jobId, jobStatusJson, "Created")
let entity = JobStatusEntity(jobId, jobId, jobStatusJson, "Created", System.DateTime.UtcNow, "http://some-url")
Raft.Utilities.raftStorage <- Fixtures.createFakeRaftStorage (Some entity)
Raft.Utilities.toolsSchemas <- Map.empty.Add("RESTler", None)

Expand Down
20 changes: 13 additions & 7 deletions src/APIService/ApiService/Controllers/Job.fs
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,17 @@ type jobsController(telemetryClient : TelemetryClient, logger : ILogger<jobsCont
| Some r -> return Some (r, results)
}

let convertToJobStatus(overallJobStatus: JobStatusEntity) (results: JobStatusEntity seq) =
results
|> Seq.map (fun jobStatusEntity -> (Raft.Message.RaftEvent.deserializeEvent jobStatusEntity.JobStatus): Message.RaftEvent.RaftJobEvent<DTOs.JobStatus>)
|> Seq.map (fun jobStatus ->
if jobStatus.Message.AgentName = jobStatus.Message.JobId then
{ jobStatus.Message with ResultsUrl = overallJobStatus.ResultsUrl }
else
jobStatus.Message
)


[<HttpPost>]
/// <summary>
/// Submit a job definition.
Expand Down Expand Up @@ -596,12 +607,8 @@ type jobsController(telemetryClient : TelemetryClient, logger : ILogger<jobsCont
Details = [||]
InnerError = {Message = ""}
}} Microsoft.AspNetCore.Http.StatusCodes.Status404NotFound
| Some (_, results) ->
let decodedMessages =
results
|> Seq.map (fun jobStatusEntity -> (Raft.Message.RaftEvent.deserializeEvent jobStatusEntity.JobStatus): Message.RaftEvent.RaftJobEvent<DTOs.JobStatus>)
|> Seq.map (fun jobStatus -> jobStatus.Message)

| Some (r, results) ->
let decodedMessages = convertToJobStatus r results
stopWatch.Stop()
Central.Telemetry.TrackMetric (TelemetryValues.ApiRequest(method, float stopWatch.ElapsedMilliseconds), "milliseconds", this :> ControllerBase)
return JsonResult(decodedMessages)
Expand Down Expand Up @@ -641,7 +648,6 @@ type jobsController(telemetryClient : TelemetryClient, logger : ILogger<jobsCont
Constants.Timestamp, QueryComparisons.GreaterThanOrEqual,
DateTimeOffset.Now.Subtract(defaultTimeSpan)))


let! result = Utilities.raftStorage.GetJobStatusEntities query

let statuses : DTOs.JobStatus seq = result
Expand Down
3 changes: 2 additions & 1 deletion src/APIService/ApiService/Controllers/Webhook.fs
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,8 @@ type webhooksController(configuration : IConfiguration, telemetryClient : Teleme
Metrics = None
UtcEventTime = DateTime.UtcNow
Details = Some (Map.empty.Add("Method", method))
Metadata = None
Metadata = Some (Map.empty.Add("BuildId", "123456"))
ResultsUrl = Some(sprintf "http://results.file.share/%s" jobId)
}
log.Info "Setting JobStatus webhook in webhooks table" ["name", webhookName; "event", eventName; "jobId", sprintf "%A" jobId]
let entity = Raft.StorageEntities.JobWebhookEntity(jobId, webhookName) :> TableEntity
Expand Down
1 change: 1 addition & 0 deletions src/APIService/ApiService/DTOs.fs
Original file line number Diff line number Diff line change
Expand Up @@ -318,4 +318,5 @@ module DTOs =

AgentName : string

ResultsUrl : string
}
5 changes: 5 additions & 0 deletions src/Agent/RESTlerAgent/AgentMain.fs
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,7 @@ let main argv =
Metrics = None
UtcEventTime = System.DateTime.UtcNow
Details = None
ResultsUrl = None
}: Raft.JobEvents.JobStatus)

printfn "Got job configuration message: %A" restlerPayload
Expand Down Expand Up @@ -569,6 +570,7 @@ let main argv =
Metrics = summary
UtcEventTime = System.DateTime.UtcNow
Details = Some( details.Add("numberOfBugsFound", sprintf "%d" bugsListLen))
ResultsUrl = None
} : Raft.JobEvents.JobStatus)
}

Expand Down Expand Up @@ -841,6 +843,7 @@ let main argv =
Metrics = None
UtcEventTime = System.DateTime.UtcNow
Details = Some (Map.ofSeq replaySummaryDetails)
ResultsUrl = None
} : Raft.JobEvents.JobStatus)

return replaySummaryDetails
Expand Down Expand Up @@ -924,6 +927,7 @@ let main argv =
Metrics = summary
UtcEventTime = System.DateTime.UtcNow
Details = details
ResultsUrl = None
} : Raft.JobEvents.JobStatus)

let restlerTelemetry = Restler.Telemetry.getDataFromTestingSummary testingSummary
Expand Down Expand Up @@ -958,6 +962,7 @@ let main argv =
Metrics = None
UtcEventTime = System.DateTime.UtcNow
Details = Some (Map.empty.Add("Error", ex.Message))
ResultsUrl = None
} : Raft.JobEvents.JobStatus)

do! System.Console.Error.FlushAsync().ToAsync
Expand Down
1 change: 1 addition & 0 deletions src/Contracts/JobEvents.fs
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ type JobStatus =
Details: Map<string, string> option
Metadata : Map<string, string> option
AgentName: string
ResultsUrl : string option
}

static member EventType = Events.JobEventTypes.JobStatus.ToString()
Expand Down
6 changes: 4 additions & 2 deletions src/Contracts/StorageEntities.fs
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@ module Raft.StorageEntities
open Microsoft.Azure.Cosmos.Table

let JobStatusTableName = "JobStatus"
type JobStatusEntity(jobId, agentName, jobStatus, jobState) =
type JobStatusEntity(jobId, agentName, jobStatus, jobState, utcEventTime, resultsUrl) =
inherit TableEntity(partitionKey=jobId, rowKey=agentName)
new() = JobStatusEntity(null, null, null, null)
new() = JobStatusEntity(null, null, null, null, System.DateTime.MinValue, null)
member val JobStatus : string = jobStatus with get, set
member val JobState : string = jobState with get, set
member val ResultsUrl : string = resultsUrl with get, set
member val UtcEventTime : System.DateTime = utcEventTime with get, set


let JobTableName = "Job"
Expand Down
Loading