kubernetesJobRestServer.ts 1.4 KB
Newer Older
liuzhe-lz's avatar
liuzhe-lz committed
1
2
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
3
4

import { Inject } from 'typescript-ioc';
5
import * as component from 'common/component';
6
import { ClusterJobRestServer } from '../common/clusterJobRestServer';
7
import { KubernetesTrainingService } from './kubernetesTrainingService';
8
9
10

/**
 * Kubeflow Training service Rest server, provides rest API to support kubeflow job metrics update
11
 *
12
13
 */
@component.Singleton
14
export class KubernetesJobRestServer extends ClusterJobRestServer {
15
    @Inject
16
    private readonly kubernetesTrainingService? : KubernetesTrainingService;
17
18
19
    /**
     * constructor to provide NNIRestServer's own rest property, e.g. port
     */
20
    constructor(kubernetesTrainingService: KubernetesTrainingService) {
21
        super();
22
        this.kubernetesTrainingService = kubernetesTrainingService;
23
24
    }

chicm-ms's avatar
chicm-ms committed
25
    protected handleTrialMetrics(jobId: string, metrics: any[]): void {
26
        if (this.kubernetesTrainingService === undefined) {
27
28
            throw Error('kubernetesTrainingService not initialized!');
        }
29
30
31
        // Split metrics array into single metric, then emit
        // Warning: If not split metrics into single ones, the behavior will  be UNKNOWN
        for (const singleMetric of metrics) {
32
            this.kubernetesTrainingService.MetricsEmitter.emit('metric', {
33
34
35
36
                id : jobId,
                data : singleMetric
            });
        }
37
    }
38
}