Coder Social home page Coder Social logo

dedica-team / nivio Goto Github PK

View Code? Open in Web Editor NEW
25.0 7.0 13.0 38.37 MB

Management of application landscapes for teams

Home Page: https://nivio.readthedocs.io/en/latest/

License: GNU Affero General Public License v3.0

Java 88.37% Dockerfile 0.02% CSS 0.37% HTML 0.46% TypeScript 10.47% JavaScript 0.31%
infrastructure graph landscape diagram architecture alm application-landscapes

nivio's Introduction

Logo

Nivio

Codefresh build status Documentation Status Quality Gate Status Nivio gui

Nivio is an application landscape management for teams (developers, operators, managers). It follows a bottom-up no-op approach, i.e. there is no interface for manual data maintenance. It is designed to gather the application landscape information from configurable items, preferably code repositories.

Getting Started

Online Demo

โ†’ Try out the Pet Clinic demo

Running locally in Docker

You need docker to run the demo:

docker run -e DEMO=1 -p 8080:8080 dedica/nivio

Point your browser to http://localhost:8080/#/landscape/petclinic to explore the features. An OpenAPI documentation is available at http://localhost:8080/swagger-ui.html.

Further Reading

  • We recommend reading the User Manual for configuration options.
  • Refer to the developer docs if you want to work on the source code.

Copyright & Trademark Acknowledgment Statements

Nivio uses the Material Design Icons released under the MIT / Apache 2.0 licenses.

The nivio logo has been designed by Alfred Rehbach

nivio's People

Contributors

amab avatar billigsteruser avatar bonndan avatar bricentchoumou avatar charberg avatar dependabot[bot] avatar dleidert avatar jenarp avatar marvinschoening avatar matthimatiker avatar mfbieber avatar mrgamedev07 avatar mureinik avatar robrobert99 avatar ruchika8 avatar snyk-bot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

nivio's Issues

Service description templates

Service description templates could be used to prefill service descriptions.

  • avoids duplicate and repetitive data entry in descriptions
  • some formats like docker compose file are hard to extend with information such as service owners

Expected behavior:
Service descriptions are prefilled with template values if a template is referenced. Values derived from the service description overwrite template values.

Possible solution:
Configure several templates and reference them in source references (similar to "autoGroup" or "format"). Process templates first, copy values to service descriptions.

Side note: AutoGroup might be replaced by templates.

Get rid of several type casts by improving the type definition

You might be able to get rid of several type casts by improving the type definition here.

E.g. something like:

    private static <T> List<T> findAll(FullyQualifiedIdentifier fqi, Collection<T extends LandscapeItem> items)

Originally posted by @Matthimatiker in #39

This also applies to several other classes, especially the interface implementations ("description" vs objects used in memory).

Development Setup instructions missing path argument for docker build command

In the Development Setup instructions the command docker build -t nivio:latest needs an additional path argument .:

$ docker build -t nivio:latest
"docker build" requires exactly 1 argument.
See 'docker build --help'.

Usage:  docker build [OPTIONS] PATH | URL | -

Build an image from a Dockerfile

vs.

$ docker build -t nivio:latest .
Sending build context to Docker daemon  89.03MB
Step 1/4 : FROM openjdk:11-jre
 ---> d0f756e22061
Step 2/4 : VOLUME /tmp
 ---> Using cache
 ---> 35db91450eb6
Step 3/4 : ADD target/nivio-0.1.0.jar app.jar
 ---> Using cache
 ---> a99db397926f
Step 4/4 : ENTRYPOINT ["java","-jar","/app.jar"]
 ---> Using cache
 ---> 7f5eaa888e8c
Successfully built 7f5eaa888e8c
Successfully tagged nivio:latest

Dashboard

Create a dashboard GUI with

  1. overview and all landscapes with states, warnings, log error (whatever is available)
  2. free floating zoom/pan navigable landscape map (already exists, needs to be extended later)

Use React and Material-UI (https://material-ui.com/)

report.html output requests additional files from localhost using absolute paths

I have just noticed that the server started by nivio is accessible from the entire local network. So far so good. However, the information in report.html is not displayed correctly, because it seems that absolute paths are used for additional files. CSS and images are requested by localhost, but are of course not available under localhost on a remote computer.

Regardless of whether the page is to be accessible from the entire network or only from the localhost, relative paths should be used.

grafik

Data completeness evaluation

As a user I want to get help how the my data can be improved.

  • #690
  • #692
  • #691
  • evaluate if the assessment can run async, i.e. later after processing and then be added to the other assessments

Example Item completeness:

  • contact or owner
  • team or contributors
  • description or 1 link

landscape with four items flickers

Reloading the graph.png renders different every time for 4 groups.

identifier: AdventOfCode
name: Advent Of Code App
contact: [email protected]


# Landscape configuration
config:
  groups:
    input:
      color: "0c8e3e"
    Frontend:
      color: "24a0ed"

  # https://jgraph.github.io/mxgraph/java/docs/com/mxgraph/layout/mxOrganicLayout.html
  jgraphx:
 #   triesPerCell: 8
 #   edgeLengthCostFactor: 0.0001
    nodeDistributionCostFactor: 900000.0
 #   borderLineCostFactor: 7.0

    #
    # for group alignment
    #

    # the higher, the longer the edges between groups
    forceConstantFactor: 4.0

    # higher value is cpu intensive, but can lead to better layouts
   # maxIterations: 1000

items:

  - identifier: user
    name: User
    type: humanuser
    group: input
    dataFlow:
      - target: fe-react
        description: User inputs data into React Frontend

  - identifier: fe-react
    name: React
    group: Frontend
    dataflow:
      - target: be-controller
        description: Using a REST-API, the data is sent to the backend

  - identifier: be-controller
    name: Controller
    group: Backend
    dataflow:
      - target: be-services
        description: Sends puzzle input to services
      - target: fe-react
        description: Sends puzzle output to frontent

  - identifier: be-services
    name: Services
    group: Backend
    dataflow:
      - target: be-persistence
        description: Sends puzzle results to the persistence layer
      - target: be-controller
        description: Sends puzzle results to the controller


  - identifier: be-persistence
    name: Persistence
    group: Backend
    dataflow:
      - target: postgres
        description: Data is stored in a PostgreSQL DB
      - target: be-service
        description: Returns retrieved data

  - identifier: postgres
    name: PostgreSQL DB
    group: Persistence
    type: database
    lifecycle: planned

Improve short distance data flow bezier curves

x/y shift of the control point (current implementation) results in badly shaped curves for long distances. A better solution might be constructing an orthogonal vector on the edge between two services and using its end as control point.

Configurable greediness/gracefulness

Currently unknown Relation (dataflow, Provider) targets are ignored. The Landscape config should allow to add unknown Elements in the fly instead of ignoring them.

Affects:

  • relations
  • Machines?
  • change default behaviour to be greedy, i.e. create everything instead of rejecting items

Source folder littered with files after docker run

I have been running Nivio via the "development setup" instructions and noticed that the source directory gets littered with image files and folders. These files remain even after terminating docker with ctrl+c (is this even the correct way?).

The image file names consist of the landscape name, followed by a random number of different lengths, followed by png, but with no extension. A new image file is created for every time, graph.png is requested.

The folders are named tomcat. followed by a random number, followed by a period and the port number. It contains the folder structure ./work/Tomcat/localhost/ROOT, but no files.

Folders named tomcat-docbase. followed by a random number, followed by a period and the port number are deleted after terminating docker.

grafik

Turn source references into string-string maps

The current implementation of references to sources (nivo, k8s, docker files) has a few fields like format, url, auth credentials. It might be more flexible to use flat string maps and have the implementations check the presence of keys and correct values. This way new fields in new format implementations do not affect existing impls.

Use error trackers for service status

In order to have just in time information on service "stability" (status), a status provider should be able to read from error trackers such as sentry.

Review service deletion

With several sources/source references describing the same services, review if/how services can be deleted from a landscape.

Reduce dataflow and providers to a single connection type

For automatic scanning of relations between landscape items it will often not be possible to find out the difference between provider connection and data flow. In this case it were better to be able to set a connection as-is, and maybe addeding some attribute to express the kind of connection.

Possible solution: replace dataflow and providers with "relation" and relation.type

Remove state providers as separate mechanic

State providers currently work as additional way to gather information, only as additive component, not as primary source of information.

Remove prometheus state provide and add it back as source format, i.e. creating landscape items on its own.

Meta nivio

Provide a Landscape of landscapes, e.g. when different departments Run their own nivio instance and an ivory tower instance collects Info from these Department instances.

Scenarios

Provide a means to visualize different scenarios, like hiding end-of-life apps and showing planned apps if requested.

Possible solution: Filter rendering using service tags (negate/exclude) and a new property "scenarios", which works like tags, but hides a service by default if one or more scenarios are set.

relates to #98

Investigate Nivio as native image

At the moment Nivio needs Java or Docker to run. Complicated setups could be avoided if Nivio would provide native executables. Micronaut and GraalVM is an option here, because Micronaut is similar to Spring.

How much effort is needed to change the code?
Can GitHub compile GraalVM stuff?

Support Interactive Application/Microservice Landscape Planning

Provide a means for quick and easy sketching of a landscape. For instance, automatically create and link services gracefully from unmatched provider/dataflow references.

JSON schema based forms provide an editor almost instantly. This generated JSON/YAML can be sent to the API, where a landscape is created or updated and then rendered instantly.

  • integrate json schema based editor, optimize UI
  • convert json to yaml and sent to API
  • optional: allow sending JSON to API (makes sense?)
  • create/update landscape
  • integrate rendered svg as preview

Status icons

Show UTF-8 Signs or favicons for service statuses instead of (or plus) abbreviations like "HEA" for health in landscape graph.

Find/Query by name

Relates to #41

In docker labels and rancher, an user might want to reference relation targets by their name, not by an internally created id (e.g. rancher service id).

Add kubernetes as information provider

The next step is to verify nivio works with k8s. How it is started is documented.

  • take your time and read the fine manual (k8s)
  • create a local cluster (e.g. using minikube) and load some apps using https://helm.sh/ and see what output is generated and what is missing, open tickets or fix yourself
  • create a local cluster (e.g. using minikube) and load some services manually and see what output is generated and what is missing, open tickets or fix yourself

Consider removing JPA persistence

All graphs could be kept in memory without losing too much, except for state. The code would become a lot less complex.

  • consider using cqengine to allow querying instead of built-in lists for service repo

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.