...

Source file src/scheduler/api/function_scale_function.go

Documentation: scheduler/api

     1  /*
     2   * P2PFaaS - A framework for FaaS Load Balancing
     3   * Copyright (c) 2019 - 2022. Gabriele Proietti Mattia <pm.gabriele@outlook.com>
     4   *
     5   * This program is free software: you can redistribute it and/or modify
     6   * it under the terms of the GNU General Public License as published by
     7   * the Free Software Foundation, either version 3 of the License, or
     8   * (at your option) any later version.
     9   *
    10   * This program is distributed in the hope that it will be useful,
    11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
    12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    13   * GNU General Public License for more details.
    14   *
    15   * You should have received a copy of the GNU General Public License
    16   * along with this program.  If not, see <https://www.gnu.org/licenses/>.
    17   */
    18  
    19  package api
    20  
    21  import (
    22  	"encoding/json"
    23  	"github.com/gorilla/mux"
    24  	"io/ioutil"
    25  	"net/http"
    26  	"scheduler/errors"
    27  	"scheduler/faas_openfaas"
    28  	"scheduler/log"
    29  	"scheduler/utils"
    30  )
    31  
    32  func SystemScaleFunctionPost(w http.ResponseWriter, r *http.Request) {
    33  	vars := mux.Vars(r)
    34  	function := vars["function"]
    35  	if function == "" {
    36  		errors.ReplyWithError(&w, errors.GenericError, nil)
    37  		log.Log.Debugf("service is not specified")
    38  		return
    39  	}
    40  
    41  	bytes, err := ioutil.ReadAll(r.Body)
    42  	if err != nil {
    43  		log.Log.Debugf("Cannot parse input: %s", err)
    44  		errors.ReplyWithError(&w, errors.InputNotValid, nil)
    45  		return
    46  	}
    47  
    48  	var params faas_openfaas.FunctionScalePayload
    49  	err = json.Unmarshal(bytes, &params)
    50  	if err != nil {
    51  		log.Log.Debugf("Cannot parse json input: %s", err)
    52  		errors.ReplyWithError(&w, errors.InputNotValid, nil)
    53  		return
    54  	}
    55  	res, err := faas_openfaas.FunctionScale(function, params.Replicas)
    56  	if err != nil {
    57  		log.Log.Debugf("Cannot scale function: %s", err)
    58  		errors.ReplyWithError(&w, errors.GenericOpenFaasError, nil)
    59  		return
    60  	}
    61  
    62  	utils.HttpSendJSONResponseByte(&w, res.StatusCode, res.Body, nil)
    63  }
    64  

View as plain text