kandi background
Explore Kits

SimianArmy | Tools for keeping your cloud operating in top form | Architecture library

 by   Netflix Java Version: v2.5.3 License: Apache-2.0

 by   Netflix Java Version: v2.5.3 License: Apache-2.0

Download this library from

kandi X-RAY | SimianArmy Summary

SimianArmy is a Java library typically used in Architecture applications. SimianArmy has no bugs, it has no vulnerabilities, it has build file available, it has a Permissive License and it has medium support. You can download it from GitHub.
The Simian Army is a suite of tools for keeping your cloud operating in top form. Chaos Monkey, the first member, is a resiliency tool that helps ensure that your applications can tolerate random instance failures.
Support
Support
Quality
Quality
Security
Security
License
License
Reuse
Reuse

kandi-support Support

  • SimianArmy has a medium active ecosystem.
  • It has 7791 star(s) with 1138 fork(s). There are 872 watchers for this library.
  • It had no major release in the last 12 months.
  • There are 40 open issues and 67 have been closed. On average issues are closed in 132 days. There are 6 open pull requests and 0 closed requests.
  • It has a neutral sentiment in the developer community.
  • The latest version of SimianArmy is v2.5.3
SimianArmy Support
Best in #Architecture
Average in #Architecture
SimianArmy Support
Best in #Architecture
Average in #Architecture

quality kandi Quality

  • SimianArmy has 0 bugs and 0 code smells.
SimianArmy Quality
Best in #Architecture
Average in #Architecture
SimianArmy Quality
Best in #Architecture
Average in #Architecture

securitySecurity

  • SimianArmy has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.
  • SimianArmy code analysis shows 0 unresolved vulnerabilities.
  • There are 0 security hotspots that need review.
SimianArmy Security
Best in #Architecture
Average in #Architecture
SimianArmy Security
Best in #Architecture
Average in #Architecture

license License

  • SimianArmy is licensed under the Apache-2.0 License. This license is Permissive.
  • Permissive licenses have the least restrictions, and you can use them in most projects.
SimianArmy License
Best in #Architecture
Average in #Architecture
SimianArmy License
Best in #Architecture
Average in #Architecture

buildReuse

  • SimianArmy releases are available to install and integrate.
  • Build file is available. You can build the component from source.
  • SimianArmy saves you 9467 person hours of effort in developing the same functionality from scratch.
  • It has 19329 lines of code, 1651 functions and 216 files.
  • It has medium code complexity. Code complexity directly impacts maintainability of the code.
SimianArmy Reuse
Best in #Architecture
Average in #Architecture
SimianArmy Reuse
Best in #Architecture
Average in #Architecture
Top functions reviewed by kandi - BETA

kandi has reviewed SimianArmy and discovered the below as its top functions. This is intended to give you an instant insight into SimianArmy implemented functionality, and help decide if they suit your requirements.

  • Builds a map of ELB - EBS associated with an EDDA .
  • Update the last attachment info for each resource
  • Cleans up resources for cleaning .
  • refresh the owner by an image
  • Get a list of all clusters in the specified region .
  • Tries to find all the volumes that are not captured by Janitor .
  • Construct a context for JanitorEmailEmailNotifier .
  • Builds the context for the ConformityNotifier .
  • Sends a notification to all registered resources .
  • Load holidays from the year .

SimianArmy Key Features

Tools for keeping your cloud operating in top form. Chaos Monkey is a resiliency tool that helps applications tolerate random instance failures.

Community Discussions

Trending Discussions on SimianArmy
  • index out of range while attempting to write to file
Trending Discussions on SimianArmy

QUESTION

index out of range while attempting to write to file

Asked 2018-Feb-14 at 08:30

I believe the issue is that the buffer isn't getting flushed but am not certain, p

Error

bash-4.4$ ./golang-updateprops -f chaosmonkey.config
panic: runtime error: index out of range

goroutine 1 [running]:
main.ingest(0x7ffeefbff700, 0x12, 0x0, 0x0)
    #/golang-updateprops/update_properties.go:98 +0xa9d
main.main()
    #/golang-updateprops/update_properties.go:121 +0xb6

Code

package main

import (
  "strings"
  "bufio"
  "fmt"
  "regexp"
  "flag"
  "os"
  "io"
  "bytes"
)

var (
  filename  string
)

func isCommentOrBlank(line string) bool {
  return strings.HasPrefix(line, "#") || "" == strings.TrimSpace(line)
}

func fileExists(filename string) bool {
  if _, err := os.Stat(filename); err == nil {
    return true
  }
  return false
}

func limitLength(s string, length int) string {
  if len(s) < length {
    return s
  }
  return s[:length]
}

func padWithSpace(str, pad string, length int) string {
    for {
        str += pad
        if len(str) > length {
            return str[0:length]
        }
    }
}

func ingest(filename string) (err error) {
  file, err := os.OpenFile(filename, os.O_RDWR, 0666)
  defer file.Close()

  if err != nil {
    return err
  }

  reader := bufio.NewReader(file) // Start reading from the file with a reader.

  for {
    var buffer bytes.Buffer
    var l []byte
    var isPrefix bool

    for {
      l, isPrefix, err = reader.ReadLine()
      buffer.Write(l)

      if !isPrefix { // If we've reached the end of the line or we're at the EOF, break
        break
      }
    }

    if err == io.EOF || err != nil {
      break
    }

    line    := buffer.String()
    pattern := regexp.MustCompile(`^#([^=]+)=(.+)$`)
    matches := pattern.FindAllStringSubmatch(line, -1) // matches is [][]string

    for _, string := range matches {
      n := strings.TrimSpace(string[1])
      v := strings.TrimSpace(string[2])
      e := strings.ToLower(strings.Replace(n, ".", "/", -1))

      // newline creation for if block
      nl := "{{if exists \"/" + e + "\" -}}\n"
      nl += padWithSpace(n, " ", 80) + " = {{getv \"" + e + "\" \"" + v + "\"}}\n"
      nl += "{{end -}}\n"

      buffer.WriteString(nl)
      file.Sync()
    }

    // dont proccess comments
    if (isCommentOrBlank(line)) {
      buffer.WriteString(line)
      file.Sync()
    } else {
      a := strings.Split(line, "=")
      n := strings.TrimSpace(a[1])
      v := strings.TrimSpace(a[2])
      e := strings.ToLower(strings.Replace(n, ".", "/", -1))

      nl := padWithSpace(n, " ", 80) + " = {{getv \"" + e + "\" \"" + v + "\"}}\n"
      buffer.WriteString(nl)
      file.Sync()
    }
  }

  if err != io.EOF {
    fmt.Printf(" > Failed!: %v\n", err)
  }
  return
}

func main() {
  flag.StringVar(&filename, "f", "filename", "The file location to be parsed")
  flag.Parse()

  if !fileExists(filename) {
    fmt.Println(" > File does not exist\n")
  }

  ingest(filename)
}

Config being parsed

# The file contains the properties for Chaos Monkey.
# see documentation at:
# https://github.com/Netflix/SimianArmy/wiki/Configuration

# let chaos run
simianarmy.chaos.enabled = true

# don't allow chaos to kill (ie dryrun mode)
simianarmy.chaos.leashed = true

# set to "false" for Opt-In behavior, "true" for Opt-Out behavior
simianarmy.chaos.ASG.enabled = false

# uncomment this line to use tunable aggression
#simianarmy.client.chaos.class = com.netflix.simianarmy.tunable.TunablyAggressiveChaosMonkey

# default probability for all ASGs
simianarmy.chaos.ASG.probability = 1.0

# increase or decrease the termination limit
simianarmy.chaos.ASG.maxTerminationsPerDay = 1.0

# Strategies
simianarmy.chaos.shutdowninstance.enabled = true
simianarmy.chaos.blockallnetworktraffic.enabled = false
simianarmy.chaos.burncpu.enabled = false
simianarmy.chaos.killprocesses.enabled = false
simianarmy.chaos.nullroute.enabled = false
simianarmy.chaos.failapi.enabled = false
simianarmy.chaos.faildns.enabled = false
simianarmy.chaos.faildynamodb.enabled = false
simianarmy.chaos.fails3.enabled = false
simianarmy.chaos.networkcorruption.enabled = false
simianarmy.chaos.networklatency.enabled = false
simianarmy.chaos.networkloss.enabled = false

# Force-detaching EBS volumes may cause data loss
simianarmy.chaos.detachvolumes.enabled = false

# FillDisk fills the root disk.
# NOTE: This may incur charges for an EBS root volume.  See burnmoney option.
simianarmy.chaos.burnio.enabled = false
# BurnIO causes disk activity on the root disk.
# NOTE: This may incur charges for an EBS root volume. See burnmoney option.
simianarmy.chaos.filldisk.enabled = false

# Where we know the chaos strategy will incur charges, we won't run it unless burnmoney is true.
simianarmy.chaos.burnmoney = false


# enable a specific ASG
# simianarmy.chaos.ASG.<asgName>.enabled = true
# simianarmy.chaos.ASG.<asgName>.probability = 1.0

# increase or decrease the termination limit for a specific ASG
# simianarmy.chaos.ASG.<asgName>.maxTerminationsPerDay = 1.0

# Enroll in mandatory terminations.  If a group has not had a
# termination within the windowInDays range then it will terminate
# one instance in the group with a 0.5 probability (at some point in
# the next 2 days an instance should be terminated), then
# do nothing again for windowInDays.  This forces "enabled" groups
# that have a probability of 0.0 to have terminations periodically.
simianarmy.chaos.mandatoryTermination.enabled = false
simianarmy.chaos.mandatoryTermination.windowInDays = 32
simianarmy.chaos.mandatoryTermination.defaultProbability = 0.5

# Enable notification for Chaos termination for a specific instance group
# simianarmy.chaos.<groupType>.<groupName>.notification.enabled = true

# Set the destination email the termination notification sent to for a specific instance group
# simianarmy.chaos.<groupType>.<groupName>.ownerEmail = foo@bar.com

# Set the source email that sends the termination notification
# simianarmy.chaos.notification.sourceEmail = foo@bar.com

# Enable notification for Chaos termination for all instance groups
#simianarmy.chaos.notification.global.enabled = true

# Set the destination email the termination notification is sent to for all instance groups
#simianarmy.chaos.notification.global.receiverEmail = foo@bar.com

# Set a prefix applied to the subject of all termination notifications
# Probably want to include a trailing space to separate from start of default text
#simianarmy.chaos.notification.subject.prefix = SubjectPrefix

# Set a suffix applied to the subject of all termination notifications
# Probably want to include an escaped space " \ " to separate from end of default text
#simianarmy.chaos.notification.subject.suffix =  \ SubjectSuffix

# Set a prefix applied to the body of all termination notifications
# Probably want to include a trailing space to separate from start of default text
#simianarmy.chaos.notification.body.prefix = BodyPrefix

# Set a suffix applied to the body of all termination notifications
# Probably want to include an escaped space " \ " to separate from end of default text
#simianarmy.chaos.notification.body.suffix =  \ BodySuffix

# Enable the email subject to be the same as the body, to include terminated instance and group information
#simianarmy.chaos.notification.subject.isBody = true
#set the tag filter on the ASGs to terminate only instances from the ASG with the this tag key and value
#simianarmy.chaos.ASGtag.key = chaos_monkey
#simianarmy.chaos.ASGtag.value = true

ANSWER

Answered 2018-Feb-14 at 04:25

The problem seems to be coming from these two lines inside your ingest function:

n := strings.TrimSpace(a[1])
v := strings.TrimSpace(a[2])

Should that maybe be a[0] and a[1]?

Source https://stackoverflow.com/questions/48779632

Community Discussions, Code Snippets contain sources that include Stack Exchange Network

Vulnerabilities

No vulnerabilities reported

Install SimianArmy

You can download it from GitHub.
You can use SimianArmy like any standard Java library. Please include the the jar files in your classpath. You can also use any IDE and you can run and debug the SimianArmy component as you would do with any other Java program. Best practice is to use a build tool that supports dependency management such as Maven or Gradle. For Maven installation, please refer maven.apache.org. For Gradle installation, please refer gradle.org .

Support

Because the project is no longer maintained, there is a good chance that nobody will be able to answer a support question.

DOWNLOAD this Library from

Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
over 430 million Knowledge Items
Find more libraries
Reuse Solution Kits and Libraries Curated by Popular Use Cases

Save this library and start creating your kit

Explore Related Topics

Share this Page

share link
Compare Architecture Libraries with Permissive License
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
over 430 million Knowledge Items
Find more libraries
Reuse Solution Kits and Libraries Curated by Popular Use Cases

Save this library and start creating your kit

  • © 2022 Open Weaver Inc.