Giter Site home page Giter Site logo

hubblo-org / cabestan Goto Github PK

View Code? Open in Web Editor NEW
13.0 5.0 2.0 370 KB

Gather and normalize ICT inventory data from multiple sources, to enable automation of ICT carbon and environmental impacts (LCA-inspired) assessments.

License: Apache License 2.0

climate climate-change cmdb environment inventory inventory-management itsm lca minerals

cabestan's People

Contributors

bpetit avatar da-ekchajzer avatar gitter-badger avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar

cabestan's Issues

Observium scanner

Problem

I want to use cabestan to gather my assets list from Observium

Rest API

doc : https://docs.observium.org/api/

  1. list all devices : GET {base_url}/api/v0/devices/
  2. list all info on a device : GET {base_url}/api/v0/devices/1/

result :

{
  "status": "ok",
  "count": 2,
  "devices": {
    "277": {
      "device_id": "277",
      "hostname": "router-1.company.com",
      "sysObjectID": ".1.3.6.1.4.1.9.1.620",
      "sysDescr": "Cisco IOS Software, 1841 Software (C1841-IPBASE-M), Version 15.0(1)M4, RELEASE SOFTWARE (fc1)\r\nTechnical Support: http://www.cisco.com/techsupport\r\nCopyright 
(c) 1986-2010 by Cisco Systems, Inc.\r\nCompiled Thu 28-Oct-10 15:40 by prod_rel_team",
      "version": "15.0(1)M4",
      "hardware": "CISCO1841",
      "features": "IPBASE",
      "os": "ios",
      ...
      <most device data removed for brevity>
    },
    "278": {
      "device_id": "278",
      "hostname": "router-b.company.com", }
      "sysObjectID": ".1.3.6.1.4.1.9.1.620",
      "sysDescr": "Cisco IOS Software, 1841 Software (C1841-IPBASE-M), Version 15.0(1)M4, RELEASE SOFTWARE (fc1)\r\nTechnical Support: http://www.cisco.com/techsupport\r\nCopyright 
(c) 1986-2010 by Cisco Systems, Inc.\r\nCompiled Thu 28-Oct-10 15:40 by prod_rel_team",
      "version": "15.0(1)M4",
      "hardware": "CISCO1841",
      "features": "IPBASE",
      "os": "ios",
      ...
      <most device data removed for brevity>
    }
  }
}

Auto-discovery

doc : https://docs.observium.org/autodiscovery/

Observium provide an auto-discovery method which uses :

  1. "SNMP to gather information about a device. This information allows Observium to discover all the internal sensors and interfaces of this device."
  2. "Observium finds all the neighbors of this device by using protocols such as CDP, LLDP, FDP, or EDP, and gathering neighbor information from routing protocols such as OSPF."

Auto-discovery needs modifications in the configuration files of the Observium instance.

Observium Auto-discovery shouldn't be configured from cabestan :

  1. We can document the process for user using the Observium scanner
  2. We can be inspired by the existing auto-discovery feature for or own SNMP scanner #7

SQL database exporter

Problem

In order to reuse the data, I want to export the assets collected by cabestan in a SQL database

Solution

We should create an SQL exporter that matches the internal structure of Cabestan data format in order to ease the import/export.
ORM could be a good strategy

Google workplace scanner

Problem

As an asset manager I want to use cabestan to retrieve the company's Google workplace usage data from the Google API.

Solution

Google provides a Reports API SDK.
Doc : https://developers.google.com/admin-sdk/reports/v1/get-start/overview

Usage data

Usage report data can be retrieved at user level or customer level (all users). We should collect aggregated data for the organization rather than at usage level in order to respect privacy.

You can find all available usage data below.

Activity report

Activity report reports events for a specific application or service, such as Google Drive or the Admin console.
Activities are punctual events

nmap inventory scanner

Problem

As a network administrator, I want to use cabestan to inventories the devices on my network from a network scan

Solution

Using nmap we can scan an IP range, identify some information about devices behind the IP address.

Feature 1 : Host discovery

Doc : https://nmap.org/book/host-discovery.html
Scan a range of IPs to list the IP identifying a running device. This let us gather a list of address that can be used to call running devices connected to the network. As IP might change over time, they shouldn't be used to identify a device.

Feature 2 : MAC detection

Doc: https://nmap.org/book/firewall-subversion.html#defeating-firewalls-mac-spoofing

MAC address are unique identifier for device ethernet interfaces. They could be used in our case as :

  • a primary key to identify a device. /!\ (1) MAC address could be manually modified even if it is highly unlikely (2) Several MAC addresses can identify one device with several Ethernet interfaces
  • a way to determine network physical interface vendors

Feature 3 : Remote OS Detection

Doc : https://nmap.org/book/osdetect.html

This feature allows us to detect which OS the device is running on.
This could be very useful to characterize the device.

Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6.39
OS details: Linux 2.6.39

Feature 4 : Device type

Doc : https://nmap.org/book/osdetect-device-types.html

Nmap can tag a device in the network with a type according to it's matching algorithm. The list of device types can be found in the doc.
This could be useful to characterize the device.

Device type: firewall

Feature 5 : Application and services

Doc : https://nmap.org/book/vscan.html

This feature allows us to inventories some services reachable over the network. It can be used to :

  • List the existing service in the network
  • Characterize the device being scanned
PORT     STATE    SERVICE       VERSION
22/tcp   open     ssh           OpenSSH 8.4p1 Debian 5 (protocol 2.0)
25/tcp   filtered smtp
80/tcp   open     http          OpenResty web app server

Limits

  • Most of nmap features might not always return a value. We should have a process handeling those cases.

Boavizta's cloud-scanner

Problem

As an asset manager I want to use cabestan to inventories my cloud resource usage.
The scanner should at least be able to retrieve inventory from GCP, AZURE and AWS.

Solution

Boavizta is building a cloud resource scanner serving this purpose. We could embed the cloud scanner et transform the data format to match cabastan data format.

Project : https://github.com/Boavizta/cloud-scanner

Centreon scanner

Problem

I want to use cabestan to gather my assets list from my centreon instance.

Solution

centreon centralize host (device for cabestan) and services (usage data for cabestan).

A host is any device that has an IP address and that one wishes to monitor. For example, a physical server, a virtual machine, a temperature probe, an IP camera, a printer or a storage space.
A service is a check point, or indicator, to be monitored on a host. This can be the CPU usage rate, temperature, motion detection, bandwidth usage rate, disk I/O, and so on.

We could export or list devices and services with cabestan.

Export centreon configuration

via Web platform (manual)

doc : https://docs.centreon.com/docs/21.04/monitoring/web-import-export/

A graphical interface to export centreon configuration as a txt file.
This will generate CLAPI commands (for a later importation) and redirect them to the /tmp/clapi-export.txt file. The explotation of the file might not be straitforward.

via CLAPI (command line)

doc : https://docs.centreon.com/docs/api/clapi/#export

centreon -u admin -p 'centreon' -e > /tmp/clapi-export.txt

This will generate CLAPI commands (for a later importation) and redirect them to the /tmp/clapi-export.txt file. The explotation of the file might not be straitforward.

List assets

via API v2

OpenAPI spec : https://raw.githubusercontent.com/centreon/centreon/21.10.x/doc/API/centreon-api-v21.10.yaml

To list all resources (Host + service) :

{{baseUrl}}/monitoring/resources?search=anim ullamco&limit=20&page=4&types=service&types=service&states=resources_problems&states=in_downtime&statuses=WARNING&statuses=UNREACHABLE&hostgroup_names=amet adipisicing proident&hostgroup_names=nisi occaecat Duis&servicegroup_names=aliquip&servicegroup_names=anim&monitoring_server_names=elit nostrud&monitoring_server_names=enim elit &status_types=soft&status_types=soft
result
{
 "result": [
  {
   "type": "service|host",
   "short_type": "s|h",
   "id": 12,
   "name": "Ping",
   "alias": null,
   "fqdn": null,
   "links": {
    "uris": {
     "value": "<Error: Too many levels of nesting to fake this schema>"
    },
    "endpoints": {
     "value": "<Error: Too many levels of nesting to fake this schema>"
    },
    "externals": {
     "value": "<Error: Too many levels of nesting to fake this schema>"
    }
   },
   "monitoring_server_name": "Central",
   "icon": {
    "id": 12,
    "name": "memory",
    "url": "/media/memory.png"
   },
   "parent": {
    "type": "service|host",
    "short_type": "s|h",
    "id": 12,
    "name": "Central",
    "alias": "Host",
    "fqdn": "127.0.0.1",
    "links": {
     "uris": {
      "value": "<Error: Too many levels of nesting to fake this schema>"
     },
     "endpoints": {
      "value": "<Error: Too many levels of nesting to fake this schema>"
     },
     "externals": {
      "value": "<Error: Too many levels of nesting to fake this schema>"
     }
    },
    "status": {
     "code": {
      "value": "<Error: Too many levels of nesting to fake this schema>"
     },
     "name": {
      "value": "<Error: Too many levels of nesting to fake this schema>"
     },
     "severity_code": {
      "value": "<Error: Too many levels of nesting to fake this schema>"
     }
    },
    "icon": {
     "name": {
      "value": "<Error: Too many levels of nesting to fake this schema>"
     },
     "url": {
      "value": "<Error: Too many levels of nesting to fake this schema>"
     }
    }
   },
   "status": {
    "code": {
     "value": "<Error: Too many levels of nesting to fake this schema>"
    },
    "name": {
     "value": "<Error: Too many levels of nesting to fake this schema>"
    },
    "severity_code": {
     "value": "<Error: Too many levels of nesting to fake this schema>"
    }
   },
   "in_downtime": false,
   "acknowledged": false,
   "severity_level": 1,
   "duration": "2h 3m",
   "last_status_change": "1968-09-17T11:25:54.916Z",
   "last_time_with_no_issue": "1948-09-21T10:42:47.332Z",
   "tries": "3/3 (H)",
   "last_check": "1h 45m",
   "information": "OK - Ping is ok",
   "active_checks": true,
   "passive_checks": true
  },
  {
   "type": "service|host",
   "short_type": "s|h",
   "id": 12,
   "name": "Ping",
   "alias": null,
   "fqdn": null,
   "links": {
    "uris": {
     "value": "<Error: Too many levels of nesting to fake this schema>"
    },
    "endpoints": {
     "value": "<Error: Too many levels of nesting to fake this schema>"
    },
    "externals": {
     "value": "<Error: Too many levels of nesting to fake this schema>"
    }
   },
   "monitoring_server_name": "Central",
   "icon": {
    "id": 12,
    "name": "memory",
    "url": "/media/memory.png"
   },
   "parent": {
    "type": "service|host",
    "short_type": "s|h",
    "id": 12,
    "name": "Central",
    "alias": "Host",
    "fqdn": "127.0.0.1",
    "links": {
     "uris": {
      "value": "<Error: Too many levels of nesting to fake this schema>"
     },
     "endpoints": {
      "value": "<Error: Too many levels of nesting to fake this schema>"
     },
     "externals": {
      "value": "<Error: Too many levels of nesting to fake this schema>"
     }
    },
    "status": {
     "code": {
      "value": "<Error: Too many levels of nesting to fake this schema>"
     },
     "name": {
      "value": "<Error: Too many levels of nesting to fake this schema>"
     },
     "severity_code": {
      "value": "<Error: Too many levels of nesting to fake this schema>"
     }
    },
    "icon": {
     "name": {
      "value": "<Error: Too many levels of nesting to fake this schema>"
     },
     "url": {
      "value": "<Error: Too many levels of nesting to fake this schema>"
     }
    }
   },
   "status": {
    "code": {
     "value": "<Error: Too many levels of nesting to fake this schema>"
    },
    "name": {
     "value"example output: "<Error: Too many levels of nesting to fake this schema>"
    },
    "severity_code": {
     "value": "<Error: Too many levels of nesting to fake this schema>"
    }
   },
   "in_downtime": false,
   "acknowledged": false,
   "severity_level": 1,
   "duration": "2h 3m",
   "last_status_change": "1988-02-06T13:59:45.715Z",
   "last_time_with_no_issue": "1962-03-02T03:57:21.464Z",
   "tries": "3/3 (H)",
   "last_check": "1h 45m",
   "information": "OK - Ping is ok",
   "active_checks": true,
   "passive_checks": true
  }
 ],
 "meta": {
  "page": 1,
  "limit": 10,
  "search": {},
  "sort_by": {},
  "total": 1
 }
}

Host

To list all host :

{{baseUrl}}/monitoring/hosts?show_service=true&search=anim ullamco&limit=20&page=4

result
{
 "result": [
  {
   "id": {
    "value": "<Error: Too many levels of nesting to fake this schema>"
   },
   "alias": {
    "value": "<Error: Too many levels of nesting to fake this schema>"
   },
   "display_name": {
    "value": "<Error: Too many levels of nesting to fake this schema>"
   },
   "name": {
    "value": "<Error: Too many levels of nesting to fake this schema>"
   },
   "state": {
    "value": "<Error: Too many levels of nesting to fake this schema>"
   },
   "services": {
    "value": "<Error: Too many levels of nesting to fake this schema>"
   },
   "poller_id": 1,
   "acknowledged": false,
   "address_ip": "127.0.0.1",
   "check_attempt": 1,
   "checked": true,
   "execution_time": 0.070906,
   "icon_image": "ppm/operatingsystems-linux-snmp-linux-128.png",
   "icon_image_alt": "",
   "last_check": "1977-12-07T09:39:29.803Z",
   "last_hard_state_change": "1946-08-17T07:02:08.802Z",
   "last_state_change": "1979-06-02T20:48:41.737Z",
   "last_time_down": "1998-03-17T14:10:08.840Z",
   "last_time_unreachable": "2010-06-05T10:24:29.826Z",
   "last_time_up": "1970-01-18T13:10:58.364Z",
   "last_update": "1984-12-27T21:31:43.738Z",
   "max_check_attempts": 3,
   "output": "OK - 127.0.0.1 rta 0.100ms lost 0%\n",
   "passive_checks": false,
   "state_type": 0,
   "timezone": ":Europe/Paris",
   "scheduled_downtime_depth": 0,
   "criticality": 10
  },
  {
   "id": {
    "value": "<Error: Too many levels of nesting to fake this schema>"
   },
   "alias": {
    "value": "<Error: Too many levels of nesting to fake this schema>"
   },
   "display_name": {
    "value": "<Error: Too many levels of nesting to fake this schema>"
   },
   "name": {
    "value": "<Error: Too many levels of nesting to fake this schema>"
   },
   "state": {
    "value": "<Error: Too many levels of nesting to fake this schema>"
   },
   "services": {
    "value": "<Error: Too many levels of nesting to fake this schema>"
   },
   "poller_id": 1,
   "acknowledged": false,
   "address_ip": "127.0.0.1",
   "check_attempt": 1,
   "checked": true,
   "execution_time": 0.070906,
   "icon_image": "ppm/operatingsystems-linux-snmp-linux-128.png",
   "icon_image_alt": "",
   "last_check": "1950-04-07T07:55:00.342Z",
   "last_hard_state_change": "1971-07-22T10:48:45.658Z",
   "last_state_change": "1961-07-27T12:14:07.261Z",
   "last_time_down": "2007-05-29T09:31:12.846Z",
   "last_time_unreachable": "1976-05-23T01:01:58.990Z",
   "last_time_up": "1981-08-04T06:24:38.138Z",
   "last_update": "1986-09-01T16:47:13.386Z",
   "max_check_attempts": 3,
   "output": "OK - 127.0.0.1 rta 0.100ms lost 0%\n",
   "passive_checks": false,
   "state_type": 0,
   "timezone": ":Europe/Paris",
   "scheduled_downtime_depth": 0,
   "criticality": 10
  }
 ],
 "meta": {
  "page": 1,
  "limit": 10,
  "search": {},
  "sort_by": {},
  "total": 1
 }
}

Service

To list all sevices :

{{baseUrl}}/monitoring/services?search=anim ullamco&limit=20&page=4

result
{
 "result": [
  {
   "id": 5,
   "description": "Ping",
   "display_name": "Ping",
   "state": 0,
   "check_attempt": "fugiat",
   "icon_image": "",
   "icon_image_alt": "",
   "last_check": "1950-07-23T18:20:41.714Z",
   "last_state_change": "1975-09-03T15:50:12.031Z",
   "max_check_attempts": 3,
   "output": "OK - 127.0.0.1 rta 0.025ms lost 0%\n",
   "state_type": 1,
   "criticality": 10,
   "status": {
    "code": {
     "value": "<Error: Too many levels of nesting to fake this schema>"
    },
    "name": {
     "value": "<Error: Too many levels of nesting to fake this schema>"
    },
    "severity_code": {
     "value": "<Error: Too many levels of nesting to fake this schema>"
    }
   },
   "duration": "2h 3m",
   "hosts": {
    "id": 12,
    "alias": "Central",
    "display_name": "Central",
    "name": "Central",
    "state": 0
   }
  },
  {
   "id": 5,
   "description": "Ping",
   "display_name": "Ping",
   "state": 0,
   "check_attempt": "ut do",
   "icon_image": "",
   "icon_image_alt": "",
   "last_check": "1970-12-21T03:30:32.718Z",
   "last_state_change": "2013-01-01T04:58:30.751Z",
   "max_check_attempts": 3,
   "output": "OK - 127.0.0.1 rta 0.025ms lost 0%\n",
   "state_type": 1,
   "criticality": 10,
   "status": {
    "code": {
     "value": "<Error: Too many levels of nesting to fake this schema>"
    },
    "name": {
     "value": "<Error: Too many levels of nesting to fake this schema>"
    },
    "severity_code": {
     "value": "<Error: Too many levels of nesting to fake this schema>"
    }
   },
   "duration": "2h 3m",
   "hosts": {
    "id": 12,
    "alias": "Central",
    "display_name": "Central",
    "name": "Central",
    "state": 0
   }
  }
 ],
 "meta": {
  "page": 1,
  "limit": 10,
  "search": {},
  "sort_by": {},
  "total": 1
 }
}

via CLAPI (command line)

Host

Doc : https://docs.centreon.com/docs/api/clapi/#show-13

Command : centreon -u admin -p 'centreon' -o HOST -a show
Output example :

id;name;alias;address;activate
82;sri-dev1;dev1;192.168.2.1;1
83;sri-dev2;dev2;192.168.2.2;1
84;sri-dev3;dev3;192.168.2.3;0
85;sri-dev4;dev4;192.168.2.4;1
86;sri-dev5;dev5;192.168.2.5;1
87;sri-dev6;dev6;192.168.2.6;1
94;sri-dev7;dev7;192.168.2.7;1
95;sri-dev8;dev8;192.168.2.8;1

Service

Doc : https://docs.centreon.com/docs/api/clapi/#show-13

Command : centreon -u admin -p 'centreon' -o SERVICE -a show
Output example :

host id;host name;id;description;check command;check command arg;normal check interval;retry check interval;max check attempts;active checks enabled;passive checks enabled;activate
14;Centreon-Server;19;Disk-/;;;;;;2;2;1
14;Centreon-Server;20;Disk-/home;;;;;;2;2;1
14;Centreon-Server;21;Disk-/opt;;;;;;2;2;1
14;Centreon-Server;22;Disk-/usr;;;;;;2;2;1
14;Centreon-Server;23;Disk-/var;;;;;;2;2;1
14;Centreon-Server;151;Load;;;;;;2;2;1
14;Centreon-Server;25;Memory;;;;;;2;2;1
14;Centreon-Server;26;Ping;;;;;;2;2;0
14;Centreon-Server;40;dummy;check_centreon_dummy;!2!critical;;;;2;2;1

IP scanner

Listed IP could be used to feed a network scanner in a second step.

Centron auto-discovery

doc : https://docs.centreon.com/docs/21.04/monitoring/discovery/introduction/

Centreon provide an auto-discovery wizard wich agregates serveral strategies (so have already been explained here) including :

  • Cisco scanner
  • SNMP
  • VmWare
  • AZURE/AWS instance scanerr

Since the process is only avaible in a graphicall interface it's seems diffuclt to integrate it in cabestan. Thought :

  1. We can document the process for user using the centron scanner
  2. We can be inspired by the existing auto-discovery plugins

Microsoft Graph scanner

Problem

As an asset manager I want to use cabestan to retrieve the company's Microsoft Office 365 usage data and map connected devices from the Microsoft Graph API.

Solution

Microsoft provides a Mircrosoft Graph SDK to access the graph API.
Doc : https://docs.microsoft.com/en-us/graph/sdks/sdks-overview

Service usage in AD (active directory)

Microsoft graph reports : https://docs.microsoft.com/en-us/graph/reportroot-concept-overview
Microsoft's user resource : https://docs.microsoft.com/en-us/graph/api/resources/users?view=graph-rest-1.0

Devices in this AD (active directory)

Doc : https://docs.microsoft.com/en-us/graph/api/resources/device?view=graph-rest-1.0

We could use Microsoft API to list devices on an active directory

Netbox scanner

Problem

I want to use cabestan to gather my assets listed in my netbox instance.

Solution

We could use the API provided by netbox to retrieve the assets

Retrieving multiple assets by type

Documentation : https://docs.netbox.dev/en/stable/rest-api/overview/#retrieving-multiple-objects

A simple GET request at the resource endpoint will return the list of all the ressources.

curl -s -X GET http://netbox/api/ipam/ip-addresses/ | jq '.'

{
  "count": 42031,
  "next": "http://netbox/api/ipam/ip-addresses/?limit=50&offset=50",
  "previous": null,
  "results": [
    {
      "id": 5618,
      "address": "192.0.2.1/24",
      ...
    },
    {
      "id": 5619,
      "address": "192.0.2.2/24",
      ...
    },
    {
      "id": 5620,
      "address": "192.0.2.3/24",
      ...
    },
    ...
  ]
}

Type of assets

IP

Documentation : https://docs.netbox.dev/en/stable/core-functionality/ipam/

IP assets could be used in the network scanners process.

Devices

Documentation : https://docs.netbox.dev/en/stable/core-functionality/devices/

Devices represent all the physical assets in netbox. We could gather some information depending on the level of completeness of the net box instance :

  • Inventory Items (CPU, Power Suply, โ€ฆ)
  • Power information (Theoretical power usage (W) / Power distribution (W))
  • IP which can be used for network scanning

Virtual machines

Documentation : https://docs.netbox.dev/en/stable/core-functionality/virtualization/

Clusters and VMs can be specified in netbox. We could retrieve information about the configuration and the status of each VM.

Additional context

SNMP network scanner

Problem

As a network administrator, I monitor my network with SNMP. I want to use cabestan to inventories the devices on my network from an SNMP network scan

Solution

We could use net-SNMP client with a wrapper to gather multiple information.

Device discovery

Discovering devices with SNMP enable can be done throught the nmp snmp-brute script

Exemple : nmap -sU -p161 --script snmp-brute --script-args snmplist=community.lst 192.168.1.0/24

User should be able to provide a collection of IPs referring to SNMP devices.

Device type

Device type could be retrieved from the OID

  • switches
  • bridges
  • routers
  • access servers
  • computer hosts
  • hubs
  • printers

Devices data

Documentation : easysnmp.com/tutorial/getting-snmp-data/

We could use snmpwalk to list available values given though the SNMP interface

command:snmpwalk -v 1 -c public 10.0.1.1 1.3.6.1.2.1

SNMPv2-MIB::sysContact.0 = STRING: Network Admin
SNMPv2-MIB::sysName.0 = STRING: My Router
SNMPv2-MIB::sysLocation.0 = STRING: Main Office
SNMPv2-MIB::sysServices.0 = INTEGER: 14IF-MIB::ifPhysAddress.1 = STRING:
IF-MIB::ifPhysAddress.2 = STRING: 44:d9:e7:7:40:68
IF-MIB::ifPhysAddress.3 = STRING:
IF-MIB::ifPhysAddress.4 = STRING: 44:d9:e7:7:40:62
IF-MIB::ifAdminStatus.1 = INTEGER: up(1)
IF-MIB::ifAdminStatus.2 = INTEGER: up(1)
IF-MIB::ifAdminStatus.3 = INTEGER: up(1)
IF-MIB::ifAdminStatus.4 = INTEGER: up(1)...

Additional context

JSON-LD LCA Format exporter

Problem

LCA practitioners, could use Cabestan during the Life cycle inventory phase. Thus, they would need to import the assets gathered by Cabestan in their favorite LCA tools.

We should provide a data exporter for LCA data format which could be used to populate LCA tools.

Solution

In a LCA context, the assets will be considered as flows more precisely as a Product Flow
Gathered assets could be transfer to an LCA tools or databases. JSON-LD is one of the main LCA format. Supported by greendelta who are the main developers of OpenLCA. JSON-LD is human-readable.

LCA DATA could be exported :

  • as files
  • Could be pushed in an online Life cycle database

LCA data format should be linked with their impact. The exporter should provide a way to map the assets with their impacts.

Data format

{
  "@context": "http://greendelta.github.io/olca-schema/context.jsonld",
  "@type": "Flow",
  "@id": "4a40cb39-e306-3649-b6da-ca061e384e23",
  "name": "electricity, high voltage, at grid",
  "category": {
    "@type": "Category",
    "@id": "773bee4a-6f9a-41d9-b8fb-c400fb9960cf",
    "name": "supply mix"
  },
  "flowType": "PRODUCT_FLOW",
  "location": {
    "@type": "Location",
    "@id": "28840420-4e3d-3522-a930-8317344a285d",
    "name": "Poland"
  },
  "flowProperties": [
    {
      "@type": "FlowPropertyFactor",
      "referenceFlowProperty": true,
      "conversionFactor": 1.0,
      "flowProperty": {
        "@type": "FlowProperty",
        "@id": "f6811440-ee37-11de-8a39-0800200c9a66",
        "name": "Energy"
      }
    }
  ]
}

Alternatives

Few services are compatible with JSON-LD for instance SimaPro cannot read JSON-LD format. We should be able to provide a way to export the data in a more common format.

GreenDelat provides a Java converter for :

If we implement one of those format we should be able to provides all the main data format thought such converter.

Additional context

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.