Unverified Commit c2c1f0fb authored by Kevin Di Lallo's avatar Kevin Di Lallo Committed by GitHub
Browse files

Merge pull request #5 from idcc-dev/sp_dev_sp24_kibana_pv

NA541 + NA523 fixes
parents 7d4fdc74 7d4a4e33
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@ spec:
    storage: 4Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: "<WORKDIR>/es-master-0"
  storageClassName: meep-pv-es-master
@@ -30,7 +30,7 @@ spec:
    storage: 4Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: "<WORKDIR>/es-master-1"
  storageClassName: meep-pv-es-master
@@ -53,7 +53,7 @@ spec:
    storage: 30Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: "<WORKDIR>/es-data"
  storageClassName: meep-pv-es-data
+3 −3
Original line number Diff line number Diff line
@@ -152,7 +152,7 @@ dashboardImport:
plugins:
  # set to true to enable plugins installation
  # true to enable persistent volume claim
  enabled: true
  enabled: false
  # set to true to remove all kibana plugins before installation
  reset: false
  # Use <plugin_name,version,url> to add/upgrade plugin
@@ -163,7 +163,7 @@ plugins:

persistentVolumeClaim:
  # set to true to use pvc
  enabled: true
  enabled: false
  # set to true to use you own pvc
  existingClaim: false
  annotations: {}
@@ -181,7 +181,7 @@ persistentVolumeClaim:
  storageClass: "meep-pv-kibana"

persistentVolume:
  enabled: true
  enabled: false
  location: "" 

# default security context
+32 −4
Original line number Diff line number Diff line
@@ -61,6 +61,8 @@ type NetChar struct {
	PacketLoss         int
}

//NextUniqueNumber is reserving 2 spaces for each unique number to apply changes starting with odd number and using even number to apply the 1st change
//and come bask on the odd number for the next update to apply
type NetElem struct {
	Name             string
	Type             string
@@ -161,6 +163,7 @@ var podCountReq = 0
var podCount = 0
var svcCountReq = 0
var svcCount = 0
var nextTransactionId = 1

// Init - TC Engine initialization
func Init() (err error) {
@@ -252,8 +255,13 @@ func processActiveScenarioUpdate() {
		// Apply network characteristic rules
		applyNetCharRules()

		//Update the Db for state information (only transactionId for now)
		updateDbState(nextTransactionId)

		// Publish update to TC Sidecars for enforcement
		_ = Publish(channelTcNet, "")
		transactionIdStr := strconv.Itoa(nextTransactionId)
		_ = Publish(channelTcNet, transactionIdStr)
		nextTransactionId++
	}
}

@@ -797,6 +805,15 @@ func populateNetChar(nc *NetChar, latency int, latencyVariation int, latencyCorr
	nc.PacketLoss = packetLoss
}

func updateDbState(transactionId int) {

	var dbState = make(map[string]interface{})
	dbState["transactionIdStored"] = transactionId

	keyName := moduleTcEngine + ":" + typeNet + ":dbState"
	_ = DBSetEntry(keyName, dbState)
}

func applyNetCharRules() {
	log.Debug("applyNetCharRules")

@@ -860,6 +877,13 @@ func applyNetCharRules() {
							needUpdate = false
						} else { //there is a difference... replace the old one
							needUpdate = true //store the index
							//using a convention where one odd and even number reserved for the same rule (applied and updated one)nd using one after the other
							if storedFilterInfo.UniqueNumber%2 == 0 {
								filterInfo.UniqueNumber = storedFilterInfo.UniqueNumber - 1
							} else {
								filterInfo.UniqueNumber = storedFilterInfo.UniqueNumber + 1
							}

							index = indx
						}
						break
@@ -878,11 +902,15 @@ func applyNetCharRules() {
				}
			}

			if needCreate || needUpdate {
				dstElement.NextUniqueNumber++
			if needCreate {
				//follows +2 convention since one odd and even number reserved for the same rule (applied and updated one)
				dstElement.NextUniqueNumber += 2
				_ = updateFilterRule(&filterInfo)
			} else {
				if needUpdate {
					_ = updateFilterRule(&filterInfo)
				}

			}
			indexToNetElemMap[j] = dstElement
			curNetCharList[j] = dstElement
		}
+67 −32
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ import (
	"math/rand"
	"os"
	"os/exec"
	"strconv"
	"strings"
	"time"

@@ -83,6 +84,10 @@ var measurementsRunning = false
var flushRequired = false
var firstTimePass = true

var currentTransactionId = 0
var dbTransactionId = 0
var lastTransactionIdApplied = 0

// Run - MEEP Sidecar execution
func main() {
	// Initialize MEEP Sidecar
@@ -175,8 +180,11 @@ func eventHandler(channel string, payload string) {
}

func processNetCharMsg(payload string) {
	// NOTE: Payload contains no information yet. For now reevaluate Net Char rules on every received event.
	// NOTE: Payload contains only a transaction Id
	currentTransactionId, _ = strconv.Atoi(payload)
	_ = getTransactionIdApplied() //sets dbTransactionId and will apply it
	refreshNetCharRules()
	lastTransactionIdApplied = dbTransactionId
}

func processLbMsg(payload string) {
@@ -513,6 +521,21 @@ func createPingHandler(key string, fields map[string]string, userData interface{
	return nil
}

func getTransactionIdApplied() error {
	keyName := moduleTcEngine + ":" + typeNet + ":dbState"
	err := DBForEachEntry(keyName, getDbStateHandler, nil)
	if err != nil {
		return err
	}
	return nil
}

func getDbStateHandler(key string, fields map[string]string, userData interface{}) error {
	var err error
	dbTransactionId, err = strconv.Atoi(fields["transactionIdStored"])
	return err
}

func createIfbs() error {
	keyName := moduleTcEngine + ":" + typeNet + ":" + podName + ":shape*"
	err := DBForEachEntry(keyName, createIfbsHandler, nil)
@@ -524,19 +547,20 @@ func createIfbs() error {

func createIfbsHandler(key string, fields map[string]string, userData interface{}) error {
	ifbNumber := fields["ifb_uniqueId"]

	if ifbs[ifbNumber] == "" {
	// Update the rule
		err := cmdCreateIfb(fields)
		if err != nil {
			return err
		}
	_, exists := filters[ifbNumber]

		err = cmdSetIfb(fields)
		if err != nil {
			return err
		}
	if !exists {
		_ = cmdCreateIfb(fields)
		ifbs[ifbNumber] = ifbNumber
		_ = cmdSetIfb(fields)
	} else {
		if lastTransactionIdApplied < currentTransactionId {
			_ = cmdSetIfb(fields)
			log.Info("Transactions processed on the TC-Engine quicker than they can be processed: current ", currentTransactionId, " and last applied ", lastTransactionIdApplied)
		} else {
			log.Info("Transactions processed on the TC-Engine already applied ", currentTransactionId, " vs last applied ", lastTransactionIdApplied)
		}
	}

	return nil
@@ -572,16 +596,22 @@ func createFilters() error {
func createFiltersHandler(key string, fields map[string]string, userData interface{}) error {
	ifbNumber := fields["ifb_uniqueId"]

	if filters[ifbNumber] == "" {
	_, exists := filters[ifbNumber]

	if !exists {

		ipSrc := fields["srcIp"]
		ipSvcSrc := fields["srcSvcIp"]
		srcName := fields["srcName"]

		cmdCreateFilter(ifbNumber, ipSrc)
		err := cmdCreateFilter(ifbNumber, ipSrc)
		if err == nil {

			if ipSvcSrc != "" {
			cmdCreateFilter(ifbNumber, ipSvcSrc)
				err = cmdCreateFilter(ifbNumber, ipSvcSrc)
			}
		}
		if err == nil {

			filters[ifbNumber] = ifbNumber

@@ -595,6 +625,7 @@ func createFiltersHandler(key string, fields map[string]string, userData interfa
				}
			}
		}
	}

	return nil
}
@@ -630,13 +661,16 @@ func cmdExec(cli string) (string, error) {

	cmd := exec.Command(head, parts...)
	var out bytes.Buffer
	var outErr bytes.Buffer

	cmd.Stdout = &out
	cmd.Stderr = &outErr

	err := cmd.Run() // will wait for command to return
	if err != nil {
		log.Info("ignoring error in exec command: ", err, " for command: ", cli)
		//we do not return an error, otherwise it will reset the pod
		//an error occur if you try to crete over something that is pre-existing, which should not be an error as it is possible
		//		return err
		log.Info("error in exec command: ", err, " for command: ", cli)
		log.Info("detailed output: ", outErr.String(), "---", out.String())
		return "", err
	}

	return out.String(), nil
@@ -755,7 +789,7 @@ func initializeOnFirstPass() error {
	return nil
}

func cmdCreateFilter(ifbNumber string, ipSrc string) {
func cmdCreateFilter(ifbNumber string, ipSrc string) error {

	//"tc filter add dev eth0 parent ffff: protocol ip prio $ifbNumber u32 match ip src $ipsrc match u32 0 0 action mirred egress redirect dev $ifb$ifbnumber"
	str := "tc filter add dev eth0 parent ffff: protocol ip prio " + ifbNumber + " u32 match ip src " + ipSrc + " match u32 0 0 action mirred egress redirect dev ifb" + ifbNumber
@@ -766,8 +800,9 @@ func cmdCreateFilter(ifbNumber string, ipSrc string) {
	_, err := cmdExec(str)
	if err != nil {
		log.Info("Error: ", err)
		return
		return err
	}
	return nil
}

func randSeq(n int) string {