Giter Site home page Giter Site logo

cenit-io / cenit Goto Github PK

View Code? Open in Web Editor NEW
431.0 19.0 130.0 39.47 MB

:rocket: Cenit IO - 100% open source integration Platform (iPaaS)

Home Page: https://cenit.io

License: MIT License

Ruby 95.30% JavaScript 0.21% HTML 1.04% Dockerfile 0.09% SCSS 0.50% Haml 1.20% CSS 1.64% Shell 0.01%
ipaas automation backedless data-flow edi integration hip opensource on-premises multitenant

cenit's Introduction

cenit_io

Code Climate codebeat license

OpenAPIs in collection OpenAPI specs Endpoints

Follow on Twitter

Is a 100% open integration-platform-as-a-service (iPaaS) that's modern, powerful, yet hackable to the core, ready to use in the cloud or on-premises. It is designed to solve unique integrations needs, orchestrate data flows that may involve types of protocols and data formats, and provide API management capabilities. All of which can support a wide range of integration use cases. It is particularly valuable to embrace a pervasive integration approach.

To install and learn more about the platform check the documentation

Integration Platforms build on top of Cenit

Why

The insatiable need for integration driven by social networks, open APIs, mobile apps, cloud services, and increasingly, the IoT is fertile ground for the growth of integration platform adoption.

Many are familiar with services such as Zapier and IFTTT, which addresses common integration problems but have limited capabilities to adapt to particular needs and to reflect business flows that are not simple. iPaaS platforms are designed to handle this issue, being in recent years in the state of the art for applications and data integration technologies used by large organizations, and gaining increasing interest from the general public.

The proliferation and growing importance of decentralized integration tasks driven by business and IT trends are forcing us to rethink organizational models and technology platforms to an approach to pervasive integration.

None of the vendor leaders in the market offers a completely open and transparent solution, with the freedom to use, customize, or modified without restriction. We believe that is one of the keys to wide adoption, and it is relevant in deciding to use on-premise.

Value

Cenit makes it possible that the benefits of a modern iPaaS can be accessible to the small and midsize organizations, It is particularly valuable to embrace as a strategic component of a pervasive integration approach that allows complete automation of all operational processes. As well as adding value quickly and continuously, essential to be competitive in the actual economy.

How

  • Developing a 100% open source integration Platform (iPaaS).
  • Providing options to use in the cloud or on-premise server.
  • Including open catalogs for formal API specs.
  • Giving options to share integrations at different openness levels: inside a tenant, to specific tenants, or for everyone.
  • Ensuring that anyone can create, use and share integrations.
  • Being ready for enterprise environments.

Capabilities

  • Backendless: After creating a new Data Type using a JSON Schema, a complete REST API and a CRUD UI to manage the data are generated on the fly. Useful for mobile backend and API services.

  • Routing and orchestration: Integration flow development, monitoring, and lifecycle management tools. Enables multi-step integration flows by composing atomic functionality (such as connection, transformation, data event, schedule, webhook).

  • Data integration: Data validation, transformation, mapping, and data quality. Exchange support for multiple formats (JSON, XML, ASN), standards (EDIFACT, X12, UBL) and protocol connectors (HTTP(S), FTP, SFTP, SCP).

  • Third-party service integrations: Directory of Shared Collections to connect services as ERP / Fulfilment / Marketing / Communication.

Data Pipelines between APIs

It allows the creation of custom data pipelines to process, store and move data between APIs. The flows could be trigger by data events or be scheduled.

There are now over 200 pre-built integration collections shared out of the box to connect with online internet services, fulfillment solutions, accounting, communications, ERP, multi-channel, etc.

see this video for more details

An example of integration data flow (Fancy <=> Shipstation):

  • Every 20 minutes Cenit triggers a flow to get orders from Fancy Marketplace.

  • New or updated orders are received and persisted in Cenit.

  • After the new or updated orders are saved, a Flow is triggered to send a shipment to Shipstation.

  • The flow requires transforming the Fancy Order into a valid shipment on Shipstation.

  • Every 20 minutes Cenit triggers a flow to fetch Shipped shipments from Shipstation.

  • After the shipments are updated in Cenit, a Flow is triggered to send the tracking update to Fancy.

Stack

  • Ruby
  • MongoDB
  • RabbitMQ
  • Redis

Contributing

Cenit IO is an open-source project and we encourage contributions.

In the spirit of free software, everyone is encouraged to help improve this project.

Here are some ways you can contribute:

To the Community

Since the challenge is great, we have to build the solution in the community. We believe that a successful open source project provides confidence, facilitates creating a broad community, where everyone can share answers to questions, suggestions, and improvements to the platform.

We encourage the community to join the initiative and contribute to the dissemination of the project, sharing integration experiences, collaborating in the detection and resolution of errors, or contributing to the development of the project. We hope that those who join us enjoy the collaborative work and the challenge of achieving something innovative and useful that can potentially serve many others.

Screenshots

menu

tenants

cenit_type

mobile_view

cenit's People

Contributors

alainfd82 avatar alejandro-kid avatar asnioby avatar avaldesa avatar dexterhenry avatar dhbahr avatar esousy avatar fjvigil89 avatar gitter-badger avatar jalbertcruz avatar jbustio avatar jeremylwf avatar jotolo avatar kaerdsar avatar macarci avatar maryguirola avatar sanchojaf avatar sandryaw06 avatar tareksamni avatar yenisbel avatar yoandrypa 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  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  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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cenit's Issues

Removing Connection from ConnectionRole without destroying it via API

Within the context of the PushAPI there is no way of poping a Connection out from a ConnectionRole. If a user makes the mistake of adding a Connection to the wrong ConnectionRole it must be destroyed first and then re-created so that it can be added to the correct ConnectionRole.

Grafico de Bolas y Grafico Lineal por dia de la semana en Pag Revenues

Grafico de Bolas para las Revenue por dia de la semana, en la Pag de Revenues, Grafico lineal por dia de la semana; los dias de la semana [Su, Mo, Tu, We, Th, Fr, Sa] , la idea es centrar una bola por cada dia de la semana, el radio de la bola se corresponde de al monto de ordenes.
Cada grafico se debe representar debajo la tabla correspondiente. Es importante que si nos paramos sobre cualquier punto de las series se visualice sobre el punto la fecha a la que corresponde. Igualmente en la leyenda asociada con cada curva debe aparece la fecha de incio y final de cada curva.

Setting Predefined Compare To Range Dates for Dashboard

Predefined Compare To Range Dates: la otra alternativa de seleccionar un intervalo de fechas es la variante "Predefinida", aquí las alternativas son diferentes al caso anterior, se puede seleccionar entre: Previuos Period, Previuos Year,

Allow comunication for multiples endpoint in all directions

When an endpoint push to Hub an object, if that object create a new entry in hub db, them it's object need be notified to the other endpoints subscribe to this event (thought webhook ), should be sent the new object to all endpoint except the original endpoint that initiate the request, at less the object will be modified in the interaction with the other endpoint.

Graficos de Bolas para las Revenue x Horas for Dashboard Graph

Graficos de Bolas para las Revenue x Horas: en la pag de Revenues, Grafico lineal por Horas; las horas irán desde 0 h hasta 24 h, la idea es centrar una bola por cada hora (0.5, 1.5, 2.5, ..), el radio de la bola se corresponde de al monto de ordenes. en 0.5 representas todas las ordes en el intervalo [0, 1), en 1.5 el intervalo [1,2)
Cada grafico se debe representar debajo la tabla correspondiente. Es importante que si nos paramos sobre cualquier punto de las series se visualice sobre el punto la fecha a la que corresponde. Igualmente en la leyenda asociada con cada curva debe aparece la fecha de incio y final de cada curva.

PushAPI V1 Index

When attempting to fetch all Libraries, Schemas or DataTypes the system seems to enter an infinite loop due to cyclic relations. This does not happen with Connections/ConnectionRoles.
Try with:

curl -i -X GET -H 'X-User-Access-Key: X#########' -H 'X-User-Access-Token: x#x#XXXXX-#xxxxXxx#x' -H 'Content-type:application/json' http://localhost:3001/api/v1/library

as opposed to

curl -i -X GET -H 'X-User-Access-Key: X#########' -H 'X-User-Access-Token: x#x#XXXXX-#xxxxXxx#x' -H 'Content-type:application/json' http://localhost:3001/api/v1/connection

Setting Overview Ordenes with 'Compare to' for Dashboard

Overview Ordenes with Compare to: en el Overview relacionado con la cantidad de Ordenes tendremos dos cantidades, la que corresponde al intervalo de fechas original y la cantidad que corresponde con el intervalo de fecha de comparación. Igualmente tendremos dos numeros asociados con el Revenues 'original' y 'comparación'.

Setting Predefined Range Dates for Dashboard

Predefined Range Dates: la otra alternativa de seleccionar un intervalo de fechas es variantes "Predefinidas", es un selección entre: Today, Yestarday, Last Week, Last Month, Year to Date.

Vista de Ordenes con 'Compare To' for Dashboard Graph

Vista de Ordenes con 'Compare To': Ahora dentro de la pantalla de Ordenes donde se visualizan cantidad de orders Vs intervalo de tiempo, se visualizaran dos series de tiempo o dos curvas (con diferentes colores). los valores del eje del tiempo se van a corresponder con el intervalo de tiempo original, y la curva de comparación se empezara a plotear coincidiendo con el primer valor del gráfico original.
Cada grafico se debe representar debajo la tabla correspondiente. Es importante que si nos paramos sobre cualquier punto de las series se visualice sobre el punto la fecha a la que corresponde. Igualmente en la leyenda asociada con cada curva debe aparece la fecha de incio y final de cada curva.

Graficos de Bolas por Ordenes x Dias de la semana for Dashboard Graph

Graficos de Bolas por Ordenes x Dias de la semana: En la pag de ordenes, Grafico lineal por dia de la semana; los dias de la semana [Su, Mo, Tu, We, Th, Fr, Sa] , la idea es centrar una bola por cada dia de la semana, el radio de la bola se corresponde de la cantidad de ordenes.
Cada grafico se debe representar debajo la tabla correspondiente. Es importante que si nos paramos sobre cualquier punto de las series se visualice sobre el punto la fecha a la que corresponde. Igualmente en la leyenda asociada con cada curva debe aparece la fecha de incio y final de cada curva.

issue when the name of the schema end in 's' like 'sms'

The current code take the root label of Json and pluralize for find the model

The problem happen when is done a push to cenithub.com/cenit

{ 
  "sms": {
      "id": "M1540853467",
      "from": "+19196179297",
      "phone": "+17867684474",
      "message": "Push API Test!"
   } 
}

A possible solution is change the next line

https://github.com/openjaf/cenit/blob/master/lib/cenit/handler.rb#L32

@object ? @object.update_attributes(obj) : (@object = klass.new(obj))

by

@object ? @object.update_attributes(obj) : (@object = klass.new(obj) || @object = klass.new(self.model))

The same could be do with line

data_type = Setup::DataType.where(:name => self.model.camelize).first

by

data_type = Setup::DataType.where(:name => self.model.camelize).first
data_type ||= Setup::DataType.where(:name => self.model).first
data_type ||= Setup::DataType.where(:name => self.model.upcase).first

review if is right ?

review if is right the next method?

https://github.com/openjaf/cenit/blob/develop/lib/mongoff/record.rb#L36

def save(options={})
  if errors.blank?
    errors.add(:base, "Save operation not supported on not loaded data type #{orm_model.data_type.title}")
  end
  false
end

maybe should be

def save(options={})
  if errors.present?
    errors.add(:base, "Save operation not supported on not loaded data type #{orm_model.data_type.title}")
     return false
  end
  true
end

Graficos de Bolas para las Ordenes x Horas for Dashboard Graph

Graficos de Bolas para las Ordenes x Horas: En la Pag de Ordenes, Grafico lineal por Horas; las horas irán desde 0 h hasta 24 h, la idea es centrar una bola por cada hora (0.5, 1.5, 2.5, ..), el radio de la bola se corresponde de la cantidad de ordenes. en 0.5 representas todas las ordes en el intervalo [0, 1), en 1.5 el intervalo [1,2) .
Cada grafico se debe representar debajo la tabla correspondiente. Es importante que si nos paramos sobre cualquier punto de las series se visualice sobre el punto la fecha a la que corresponde. Igualmente en la leyenda asociada con cada curva debe aparece la fecha de incio y final de cada curva.

Remove module Hub

We need remove module Hub for all the models that we interchange through Cenit.

  • remove in Json.
  • In Rails Admin the field Module that not be require, when is create a new model schema.
  • remove in any other place in the code.

Fetching by related model

Some model do not include their relations in the JSon responses. That is:
ConnectionRoles include their related Connections and Webhooks, but this does not happen for Connections which include no ConnectionRoles.
See:

curl -i -X GET -H 'X-User-Access-Key: X#########' -H 'X-User-Access-Token: x#x#XXXXX-#xxxxXxx#x' -H 'Content-type:application/json' http://localhost:3001/api/v1/connection_role

as opposed to:

curl -i -X GET -H 'X-User-Access-Key: X#########' -H 'X-User-Access-Token: x#x#XXXXX-#xxxxXxx#x' -H 'Content-type:application/json' http://localhost:3001/api/v1/connection

A call to API with wrong credentials response with html a not with JSON

For example, after install the gmail shared collection I entered wrong credentials and return HTML and not Json like I expected

curl -H "Content-Type: application/json" \
       -H "X-User-Access-Key: N740379786" \
       -H "X-User-Access-Token: ELbCC64qXyfKgyxcfdkW" \
       -X GET https://www.cenithub.com/api/v1/mime 

<!DOCTYPE html>
<html>
<head>
  <title>The page you were looking for doesn't exist (404)</title>   
<body>
  <!-- This file lives in public/404.html -->
  <div class="dialog">
    <h1>The page you were looking for doesn't exist.</h1>
    <p>You may have mistyped the address or the page may have moved.</p>
  </div>
  <p>If you are the application owner check the logs for more information.</p>
</body>
</html>

review if is right the condicional in parser.rb

review the next line
https://github.com/openjaf/cenit/blob/develop/lib/edi/parser.rb#L128

record.instance_variable_set(:@_references, references = {}) unless references = record.instance_variable_get(:@_references)

that is equivalente to
record.instance_variable_set(:@_references, {}) unless record.instance_variable_get(:@_references)

is really that you want?

of something like

if references = record.instance_variable_get(:@_references)
record.instance_variable_set(:@_references, references = {})
end

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.