SimianArmy | cloud operating in top form | Architecture library
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
Quality
Security
License
Reuse
Support
Quality
Security
License
Reuse
Support
SimianArmy has a medium active ecosystem.
It has 7927 star(s) with 1158 fork(s). There are 882 watchers for this library.
It had no major release in the last 12 months.
There are 39 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
SimianArmy has 0 bugs and 0 code smells.
SimianArmy Quality
Best in #Architecture
Average in #Architecture
SimianArmy Quality
Best in #Architecture
Average in #Architecture
Security
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
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
Reuse
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 .
Get all kandi verified functions for this library.
Get all kandi verified functions for this library.
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.
SimianArmy Examples and Code Snippets
No Code Snippets are available at this moment for SimianArmy.
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..enabled = true
# simianarmy.chaos.ASG..probability = 1.0
# increase or decrease the termination limit for a specific ASG
# simianarmy.chaos.ASG..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...notification.enabled = true
# Set the destination email the termination notification sent to for a specific instance group
# simianarmy.chaos...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:25The 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]
?
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 .
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.
Find more information at:
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesExplore Kits - Develop, implement, customize Projects, Custom Functions and Applications with kandi kits
Save this library and start creating your kit
Share this Page
Reuse Trending Solutions