diff --git a/pro/logic/status.go b/pro/logic/status.go index 39dccd26..82e2c4ea 100644 --- a/pro/logic/status.go +++ b/pro/logic/status.go @@ -26,10 +26,6 @@ func getNodeStatusOld(node *models.Node) { func GetNodeStatus(node *models.Node, defaultEnabledPolicy bool) { - if time.Since(node.LastCheckIn) > models.LastCheckInThreshold { - node.Status = models.OfflineSt - return - } if node.IsStatic { if !node.StaticNode.Enabled { node.Status = models.OfflineSt @@ -53,6 +49,10 @@ func GetNodeStatus(node *models.Node, defaultEnabledPolicy bool) { node.Status = models.UnKnown return } + if time.Since(node.LastCheckIn) > models.LastCheckInThreshold { + node.Status = models.OfflineSt + return + } host, err := logic.GetHost(node.HostID.String()) if err != nil { node.Status = models.UnKnown @@ -71,11 +71,15 @@ func GetNodeStatus(node *models.Node, defaultEnabledPolicy bool) { if err != nil { return } - if metrics == nil || metrics.Connectivity == nil { + if metrics == nil || metrics.Connectivity == nil || len(metrics.Connectivity) == 0 { if time.Since(node.LastCheckIn) < models.LastCheckInThreshold { node.Status = models.OnlineSt return } + if node.LastCheckIn.IsZero() { + node.Status = models.OfflineSt + return + } } // if node.IsFailOver { // if time.Since(node.LastCheckIn) < models.LastCheckInThreshold { @@ -133,9 +137,12 @@ func checkPeerStatus(node *models.Node, defaultAclPolicy bool) { if err != nil { continue } - allowed, _ := logic.IsNodeAllowedToCommunicate(*node, peer, false) - if !defaultAclPolicy && !allowed { - continue + + if !defaultAclPolicy { + allowed, _ := logic.IsNodeAllowedToCommunicate(*node, peer, false) + if !allowed { + continue + } } if time.Since(peer.LastCheckIn) > models.LastCheckInThreshold { @@ -154,7 +161,7 @@ func checkPeerStatus(node *models.Node, defaultAclPolicy bool) { node.Status = models.OnlineSt return } - if peerNotConnectedCnt == len(metrics.Connectivity) { + if len(metrics.Connectivity) > 0 && peerNotConnectedCnt == len(metrics.Connectivity) { node.Status = models.ErrorSt return } @@ -168,9 +175,12 @@ func checkPeerConnectivity(node *models.Node, metrics *models.Metrics, defaultAc if err != nil { continue } - allowed, _ := logic.IsNodeAllowedToCommunicate(*node, peer, false) - if !defaultAclPolicy && !allowed { - continue + + if !defaultAclPolicy { + allowed, _ := logic.IsNodeAllowedToCommunicate(*node, peer, false) + if !allowed { + continue + } } if time.Since(peer.LastCheckIn) > models.LastCheckInThreshold { @@ -181,19 +191,22 @@ func checkPeerConnectivity(node *models.Node, metrics *models.Metrics, defaultAc } // check if peer is in error state checkPeerStatus(&peer, defaultAclPolicy) - if peer.Status == models.ErrorSt { + if peer.Status == models.ErrorSt || peer.Status == models.WarningSt { continue } peerNotConnectedCnt++ } - if peerNotConnectedCnt == 0 { - node.Status = models.OnlineSt + if peerNotConnectedCnt > len(metrics.Connectivity)/2 { + node.Status = models.WarningSt return } - if peerNotConnectedCnt == len(metrics.Connectivity) { + + if len(metrics.Connectivity) > 0 && peerNotConnectedCnt == len(metrics.Connectivity) { node.Status = models.ErrorSt return } - node.Status = models.WarningSt + + node.Status = models.OnlineSt + } diff --git a/scripts/nm-quick.sh b/scripts/nm-quick.sh index 25de4a7c..86a083c5 100755 --- a/scripts/nm-quick.sh +++ b/scripts/nm-quick.sh @@ -167,19 +167,11 @@ configure_netclient() { nmctl host update $HOST_ID --default sleep 5 nmctl node create_remote_access_gateway netmaker $NODE_ID - sleep 2 - # create network for internet access vpn + # set failover if [ "$INSTALL_TYPE" = "pro" ]; then #setup failOver curl --location --request POST "https://api.${NETMAKER_BASE_DOMAIN}/api/v1/node/${NODE_ID}/failover" --header "Authorization: Bearer ${MASTER_KEY}" - INET_NODE_ID=$(sudo cat /etc/netclient/nodes.json | jq -r '."internet-access-vpn".id') - nmctl node create_remote_access_gateway internet-access-vpn $INET_NODE_ID - out=$(nmctl node list -o json | jq -r '.[] | select(.id=='\"$INET_NODE_ID\"') | .ingressdns = "8.8.8.8"') - curl --location --request PUT "https://api.${NETMAKER_BASE_DOMAIN}/api/nodes/internet-access-vpn/${INET_NODE_ID}" --data "$out" --header "Authorization: Bearer ${MASTER_KEY}" - out=$(nmctl node list -o json | jq -r '.[] | select(.id=='\"$INET_NODE_ID\"') | .metadata = "This host can be used for secure internet access"') - curl --location --request PUT "https://api.${NETMAKER_BASE_DOMAIN}/api/nodes/internet-access-vpn/${INET_NODE_ID}" --data "$out" --header "Authorization: Bearer ${MASTER_KEY}" - curl --location --request POST "https://api.${NETMAKER_BASE_DOMAIN}/api/nodes/internet-access-vpn/${INET_NODE_ID}/inet_gw" --data '{}' --header "Authorization: Bearer ${MASTER_KEY}" fi set -e } @@ -625,8 +617,7 @@ install_netmaker() { echo "Pulling config files..." - - local BASE_URL="https://raw.githubusercontent.com/gravitl/netmaker/$BUILD_TAG" + local BASE_URL="https://raw.githubusercontent.com/gravitl/netmaker/master" local COMPOSE_URL="$BASE_URL/compose/docker-compose.yml" local CADDY_URL="$BASE_URL/docker/Caddyfile" if [ "$INSTALL_TYPE" = "pro" ]; then @@ -705,7 +696,6 @@ setup_mesh() { networks=$(nmctl network list -o json) if [[ ${networks} != "null" ]]; then netmakerNet=$(nmctl network list -o json | jq -r '.[] | .netid' | grep -w "netmaker") - inetNet=$(nmctl network list -o json | jq -r '.[] | .netid' | grep -w "internet-access-vpn") fi # create netmaker network if [[ ${netmakerNet} = "" ]]; then @@ -718,43 +708,10 @@ setup_mesh() { if [[ ${netmakerTag} = "" ]]; then nmctl enrollment_key create --tags netmaker --unlimited --networks netmaker fi - - # create internet-access-vpn - if [ "$INSTALL_TYPE" = "pro" ]; then - if [[ ${inetNet} = "" ]]; then - echo "Creating internet-access-vpn network (100.65.0.0/16)" - # TODO causes "Error Status: 400 Response: {"Code":400,"Message":"could not find any records"}" - nmctl network create --name internet-access-vpn --ipv4_addr 100.65.0.0/16 - fi - - # create enrollment key for internet-access-vpn network - local inetTag=$(nmctl enrollment_key list | jq -r '.[] | .tags[0]' | grep -w "internet-access-vpn") - if [[ ${inetTag} = "" ]]; then - nmctl enrollment_key create --tags internet-access-vpn --unlimited --networks internet-access-vpn - fi - - # create enrollment key for both networks - local netInetTag=$(nmctl enrollment_key list | jq -r '.[] | .tags[0]' | grep -w "netmaker-inet") - if [[ ${netInetTag} = "" ]]; then - nmctl enrollment_key create --tags netmaker-inet --unlimited --networks netmaker,internet-access-vpn - fi - fi - - if [ "$INSTALL_TYPE" = "pro" ]; then - # create enrollment key for both setup networks - echo "Obtaining enrollment key..." - # key exists already, fetch token - TOKEN=$(nmctl enrollment_key list | jq -r '.[] | select(.tags[0]=="netmaker-inet") | .token') - - else - - echo "Obtaining enrollment key..." - # key exists already, fetch token - TOKEN=$(nmctl enrollment_key list | jq -r '.[] | select(.tags[0]=="netmaker") | .token') - fi - + echo "Obtaining enrollment key..." + # key exists already, fetch token + TOKEN=$(nmctl enrollment_key list | jq -r '.[] | select(.tags[0]=="netmaker") | .token') wait_seconds 3 - } # print_success - prints a success message upon completion diff --git a/servercfg/serverconf.go b/servercfg/serverconf.go index f415405f..267a08bf 100644 --- a/servercfg/serverconf.go +++ b/servercfg/serverconf.go @@ -654,6 +654,21 @@ func GetMqUserName() string { return password } +// GetMetricInterval - get the publish metric interval +func GetMetricIntervalInMinutes() time.Duration { + //default 15 minutes + mi := "15" + if os.Getenv("PUBLISH_METRIC_INTERVAL") != "" { + mi = os.Getenv("PUBLISH_METRIC_INTERVAL") + } + interval, err := strconv.Atoi(mi) + if err != nil { + interval = 15 + } + + return time.Duration(interval) * time.Minute +} + // GetMetricInterval - get the publish metric interval func GetMetricInterval() string { //default 15 minutes