github.com/siglens/siglens@v0.0.0-20240328180423-f7ce9ae441ed/pkg/config/derivedConfig.go (about)

     1  /*
     2  Copyright 2023.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package config
    18  
    19  import (
    20  	"fmt"
    21  	"net"
    22  	"os"
    23  	"strconv"
    24  	"strings"
    25  
    26  	log "github.com/sirupsen/logrus"
    27  )
    28  
    29  var hostName string
    30  var hostID string
    31  var smrBaseDir string
    32  
    33  func GetBaseUploadDir() string {
    34  	var sb strings.Builder
    35  	sb.WriteString(GetRunningConfig().DataPath + "uploadjobs/")
    36  	return sb.String()
    37  }
    38  
    39  func GetUploadFilename(baseDir string, streamid string) string {
    40  	var sb strings.Builder
    41  
    42  	err := os.MkdirAll(baseDir, 0764)
    43  	if err != nil {
    44  		log.Errorf("getUploadFilename: mkdir failed basedir=%v, err=%v", baseDir, err)
    45  		return ""
    46  	}
    47  	sb.WriteString(baseDir)
    48  	sb.WriteString(streamid + ".json")
    49  	return sb.String()
    50  }
    51  
    52  func GetBaseGlobalSSRDir() string {
    53  	var sb strings.Builder
    54  	sb.WriteString(GetRunningConfig().DataPath + "common/")
    55  	sb.WriteString("ssr/")
    56  	return sb.String()
    57  }
    58  
    59  func GetSSRFilename(baseDir string) string {
    60  	var sb strings.Builder
    61  
    62  	err := os.MkdirAll(baseDir, 0764)
    63  	if err != nil {
    64  		log.Errorf("getSSRFilename: mkdir failed basedir=%v, err=%v", baseDir, err)
    65  		return ""
    66  	}
    67  	sb.WriteString(baseDir)
    68  	sb.WriteString("ssr.json")
    69  	return sb.String()
    70  }
    71  
    72  func InitDerivedConfig(hostID string) error {
    73  	if hostID == "" {
    74  		return fmt.Errorf("InitDerivedConfig: hostID is empty")
    75  	}
    76  	if iName := GetSSInstanceName(); iName == "" {
    77  		hostName, _ = os.Hostname()
    78  	} else {
    79  		hostName = iName
    80  	}
    81  	setNodeIdentifier(hostID)
    82  
    83  	var sb strings.Builder
    84  	sb.WriteString(GetDataPath() + "ingestnodes/")
    85  	sb.WriteString(GetHostID() + "/")
    86  	smrBaseDir = sb.String()
    87  
    88  	err := os.MkdirAll(smrBaseDir, 0764)
    89  	if err != nil {
    90  		log.Errorf("InitDerivedConfig: mkdir failed basedir=%v, err=%v", smrBaseDir, err)
    91  		return err
    92  	}
    93  
    94  	value := os.Getenv("PORT")
    95  	if value != "" {
    96  		queryPort, err := strconv.ParseUint(value, 10, 64)
    97  		if err != nil {
    98  			log.Errorf("InitDerivedConfig: failed to parse PORT=%v, err=%v", value, err)
    99  		} else {
   100  			SetQueryPort(queryPort)
   101  		}
   102  	}
   103  	return nil
   104  }
   105  
   106  // Returns a string of the form <hostname>/<id>
   107  // The id is unqiue across server restarts. The id changes only after the data directory is deleted
   108  func GetHostID() string {
   109  	return hostID
   110  }
   111  
   112  // returns hostname:ingestport
   113  // TODO: caller assumes this is an ingest node
   114  func GetHostIP() string {
   115  	return hostName + ":" + fmt.Sprintf("%d", GetIngestPort())
   116  }
   117  
   118  // this function returns the local ip address of the host
   119  func GetLocalIP() string {
   120  	addrs, err := net.InterfaceAddrs()
   121  	if err != nil {
   122  		log.Errorf("GetLocalIP: failed to get local ip: err=%v", err)
   123  		return ""
   124  	}
   125  	var ip string
   126  	for _, addr := range addrs {
   127  		if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
   128  			if ipnet.IP.To4() != nil {
   129  				ip = ipnet.IP.String()
   130  				break
   131  			}
   132  		}
   133  	}
   134  	return ip
   135  }
   136  
   137  func GetKeyFromSegfilename(s string) string {
   138  	n := strings.LastIndexByte(s, '.')
   139  	if n == -1 {
   140  		return s
   141  	}
   142  	return s[:n]
   143  }
   144  
   145  func GetSmrBaseDir() string {
   146  	return smrBaseDir
   147  }
   148  
   149  func SetSmrBaseDirForTestOnly(indir string) {
   150  	smrBaseDir = indir
   151  }
   152  
   153  func setNodeIdentifier(nodeIdentifier string) {
   154  	hostID = fmt.Sprintf("%s.%s", hostName, nodeIdentifier)
   155  }
   156  
   157  // Returns the hostname with no unique identifier
   158  // This should be used if server restarts make no difference
   159  func GetHostname() string {
   160  	return hostName
   161  }
   162  
   163  // returns <<data path>>/ingestnodes/
   164  func GetIngestNodeBaseDir() string {
   165  	var sb strings.Builder
   166  	sb.WriteString(GetDataPath() + "ingestnodes/")
   167  	return sb.String()
   168  }
   169  
   170  // returns <<data path>>/ingestnodes/<hostid>/
   171  func GetCurrentNodeIngestDir() string {
   172  	var sb strings.Builder
   173  	sb.WriteString(GetIngestNodeBaseDir())
   174  	sb.WriteString(GetHostID())
   175  	sb.WriteString("/")
   176  	return sb.String()
   177  }
   178  
   179  func GetCurrentNodeQueryDir() string {
   180  	var sb strings.Builder
   181  	sb.WriteString(GetDataPath())
   182  	sb.WriteString("querynodes/")
   183  	sb.WriteString(GetHostID())
   184  	sb.WriteString("/")
   185  	return sb.String()
   186  }