"docs/archive_en_US/Release.md" did not exist on "1df572dc9784c67c739ac09a3f1179304145df1e"
kubernetesJobRestServer.ts 1.42 KB
Newer Older
liuzhe-lz's avatar
liuzhe-lz committed
1
2
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
3
4
5
6

'use strict';

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

/**
 * Kubeflow Training service Rest server, provides rest API to support kubeflow job metrics update
13
 *
14
15
 */
@component.Singleton
16
export class KubernetesJobRestServer extends ClusterJobRestServer {
17
    @Inject
18
    private readonly kubernetesTrainingService? : KubernetesTrainingService;
19
20
21
22

    /**
     * constructor to provide NNIRestServer's own rest property, e.g. port
     */
23
    constructor(kubernetesTrainingService: KubernetesTrainingService) {
24
        super();
25
        this.kubernetesTrainingService = kubernetesTrainingService;
26
27
    }

chicm-ms's avatar
chicm-ms committed
28
    protected handleTrialMetrics(jobId: string, metrics: any[]): void {
29
        if (this.kubernetesTrainingService === undefined) {
30
31
            throw Error('kubernetesTrainingService not initialized!');
        }
32
33
34
        // 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) {
35
            this.kubernetesTrainingService.MetricsEmitter.emit('metric', {
36
37
38
39
                id : jobId,
                data : singleMetric
            });
        }
40
    }
41
}