...

Source file src/github.com/cybertec-postgresql/pgwatch/v3/internal/webserver/source.go

Documentation: github.com/cybertec-postgresql/pgwatch/v3/internal/webserver

     1  package webserver
     2  
     3  import (
     4  	"io"
     5  	"net/http"
     6  
     7  	jsoniter "github.com/json-iterator/go"
     8  
     9  	"github.com/cybertec-postgresql/pgwatch/v3/internal/sources"
    10  )
    11  
    12  func (server *WebUIServer) handleSources(w http.ResponseWriter, r *http.Request) {
    13  	var (
    14  		err    error
    15  		params []byte
    16  		res    string
    17  	)
    18  
    19  	defer func() {
    20  		if err != nil {
    21  			http.Error(w, err.Error(), http.StatusInternalServerError)
    22  		}
    23  	}()
    24  
    25  	switch r.Method {
    26  	case http.MethodGet:
    27  		// return monitored databases
    28  		if res, err = server.GetSources(); err != nil {
    29  			return
    30  		}
    31  		_, err = w.Write([]byte(res))
    32  
    33  	case http.MethodPost:
    34  		// add new monitored database
    35  		if params, err = io.ReadAll(r.Body); err != nil {
    36  			return
    37  		}
    38  		err = server.UpdateSource(params)
    39  
    40  	case http.MethodDelete:
    41  		// delete monitored database
    42  		err = server.DeleteSource(r.URL.Query().Get("name"))
    43  
    44  	case http.MethodOptions:
    45  		w.Header().Set("Allow", "GET, POST, DELETE, OPTIONS")
    46  		w.WriteHeader(http.StatusNoContent)
    47  
    48  	default:
    49  		w.Header().Set("Allow", "GET, POST, DELETE, OPTIONS")
    50  		http.Error(w, "method not allowed", http.StatusMethodNotAllowed)
    51  	}
    52  }
    53  
    54  // GetSources returns the list of sources fo find databases for monitoring
    55  func (server *WebUIServer) GetSources() (res string, err error) {
    56  	var dbs sources.Sources
    57  	if dbs, err = server.sourcesReaderWriter.GetSources(); err != nil {
    58  		return
    59  	}
    60  	b, _ := jsoniter.ConfigFastest.Marshal(dbs)
    61  	res = string(b)
    62  	return
    63  }
    64  
    65  // DeleteSource removes the source from the list of configured sources
    66  func (server *WebUIServer) DeleteSource(database string) error {
    67  	return server.sourcesReaderWriter.DeleteSource(database)
    68  }
    69  
    70  // UpdateSource updates the configured source information
    71  func (server *WebUIServer) UpdateSource(params []byte) error {
    72  	var md sources.Source
    73  	err := jsoniter.ConfigFastest.Unmarshal(params, &md)
    74  	if err != nil {
    75  		return err
    76  	}
    77  	return server.sourcesReaderWriter.UpdateSource(md)
    78  }
    79