Skip to content

nevil-mathew/mentoring

 
 

Repository files navigation

Mentoring Service

CircleCI Duplicated Lines (%) Coverage Vulnerabilities Prettier Docs

GitHub package.json version (subfolder of monorepo) License

CircleCI insights

CircleCI

develop

CircleCI GitHub package.json version (subfolder of monorepo)

CircleCI

Duplicated Lines (%) Coverage Vulnerabilities


The Mentoring building block enables effective mentoring interactions between mentors and mentees. The capability aims to create a transparent eco-system to learn, connect, solve, and share within communities.MentorED is an open source mentoring application that facilitates peer learning and professional development by creating a community of mentors and mentees.

Setup Options

Elevate services can be setup in local using three methods:

Docker-Compose File (Easiest)

A. Docker-Compose

Expectation: Run all services simultaneously with a common Docker-Compose file.

Steps

  1. Install Docker & Docker-Compose.

  2. To create/start all containers:

    ELEVATE/mentoring$ docker-compose up
    

    You can pass .env file to docker images of elevate service by using the below command

    ELEVATE/mentoring$ mentoring_env=".env path" users_env=".env path" notification_env=".env path" scheduler=".env path"  docker-compose up
    
    

    example:

    ELEVATE/mentoring$ mentoring_env="/Users/mentoring/src/.env" users_env="/Users/user/src/.env" notification_env="/Users/notification/src/.env" scheduler="/Users/scheduler/src/.env"  docker-compose up
    
    
  3. To remove all containers & networks:

        ```
        ELEVATE/mentoring$ docker-compose down
        ```
    
        Refer **Docker-Compose README** for more information.
    
        **Note:** It isn't always necessary to run **down** command. Existing containers and networks can be stopped gracefully by using **Ctrl + C** key combination.
    
        **Warning:** Do not use docker-compose in production.
    
Dockerized service with local dependencies(Intermediate)

B. Dockerized Service With Local Dependencies

Expectation: Run single docker containerized service with existing local (in host) or remote dependencies.

Local Dependencies Steps

  1. Update dependency (Mongo v4.1.4, Kafka etc) IP addresses in .env with "host.docker.internal".

    Eg:

     #MongoDb Connectivity Url
     MONGODB_URL = mongodb://host.docker.internal:27017/elevate-mentoring
    
     #Kafka Host Server URL
     KAFKA_URL = host.docker.external:9092
    
  2. Find host.docker.internal IP address and added it to mongod.conf file in host.

    Eg: If host.docker.internal is 172.17.0.1, mongod.conf:

    # network interfaces
    net:
        port: 27017
        bindIp: "127.0.0.1,172.17.0.1"
    

    Note: Steps to find host.docker.internal IP address & location of mongod.conf is operating system specific. Refer this for more information.

  3. Build the docker image.

    /ELEVATE/mentoring$ docker build -t elevate/mentoring:1.0 .
    
  4. Run the docker container.

    • For Mac & Windows with docker v18.03+:

      $ docker run --name mentoring elevate/mentoring:1.0
      
    • For Linux:

      $ docker run --name mentoring --add-host=host.docker.internal:host-gateway elevate/mentoring:1.0`
      

      Refer this for more information.

Remote Dependencies Steps

  1. Update dependency (Mongo v4.1.4, Kafka etc) Ip addresses in .env with respective remote server IPs.

    Eg:

     #MongoDb Connectivity Url
     MONGODB_URL = mongodb://10.1.2.34:27017/elevate-mentoring
    
     #Kafka Host Server URL
     KAFKA_URL = 11.2.3.45:9092
    
  2. Add Bind IP to mongod.conf in host:

    Follow the instructions given here.

    Note: Instructions might differ based on MongoDB version and operating system.

  3. Build the docker image.

    /ELEVATE/mentoring$ docker build -t elevate/mentoring:1.0 .
    
  4. Run the docker container.

    ```
    $ docker run --name mentoring elevate/mentoring:1.0
    ```
    
Local Service with local dependencies(Hardest)

C. Local Service With Local Dependencies

Expectation: Run a single service with existing local dependencies in the host (Non-Docker Implementation).

Steps

  1. Install required tools & dependencies

    Install any IDE (eg: VScode)

    Install Nodejs: https://nodejs.org/en/download/

    Install MongoDB: https://docs.mongodb.com/manual/installation/

    Install Robo-3T: ​​ https://robomongo.org/

  2. Clone the Mentoring service repository.

    git clone https://github.com/ELEVATE-Project/mentoring.git
    
  3. Add .env file to the project directory

    Create a .env file in src directory of the project and copy these environment variables into it.

    # Mentoring Service Config
    
    # Port on which service runs
    APPLICATION_PORT = 3000
    
    # Service environment
    APPLICATION_ENV = development
    
    # Route after base url
    APPLICATION_BASE_URL = /mentoring/
    
    # Mongo db connectivity url
    MONGODB_URL = mongodb://localhost:27017/elevate-mentoring
    
    # Token secret to verify the access token
    ACCESS_TOKEN_SECRET = 'bsj82AHBxahusub12yexlashsbxAXADHBlaj'
    
    # Kafka hosted server url
    KAFKA_URL = localhost:9092
    
    # Kafka group to which consumer belongs
    KAFKA_GROUP_ID = userservice
    
    # Kafka topic to push notification data
    NOTIFICATION_KAFKA_TOPIC = notificationtopic
    
    # Kafka topic name to consume from mentoring topic
    KAFKA_MENTORING_TOPIC ="mentoringtopic"
    
    # Kafka topic to push recording data
    KAFKA_RECORDING_TOPIC ="recordingtopic"
    
    # Any one of three features available for cloud storage
    CLOUD_STORAGE = 'GCP/AWS/AZURE'
    
    # Gcp json config file path
    GCP_PATH = 'gcp.json'
    
    # Gcp bucket name which stores files
    DEFAULT_GCP_BUCKET_NAME = 'gcp-bucket-storage-name'
    
    # Gcp project id
    GCP_PROJECT_ID = 'project-id'
    
    # Aws access key id
    AWS_ACCESS_KEY_ID = 'aws-access-key-id'
    
    # Aws secret access key
    AWS_SECRET_ACCESS_KEY = 'aws-secret-access-key'
    
    # Aws region where bucket will be located
    AWS_BUCKET_REGION = 'ap-south-1'
    
    # Aws end point
    AWS_BUCKET_ENDPOINT = 's3.ap-south-1.amazonaws.com'
    
    # Aws bucket name which stores files
    DEFAULT_AWS_BUCKET_NAME = 'aws-bucket-storage-name'
    
    # Azure storage account name
    AZURE_ACCOUNT_NAME = 'account-name'
    
    # Azure storage account key
    AZURE_ACCOUNT_KEY = 'azure-account-key'
    
    # Azure storage container which stores files
    DEFAULT_AZURE_CONTAINER_NAME = 'azure-container-storage-name'
    
    # user serice host
    USER_SERIVCE_HOST = 'http://localhost:3001'
    
    # user serice base url
    USER_SERIVCE_BASE_URL = '/user/'
    
    # Big blue button url
    BIG_BLUE_BUTTON_URL = https://dev.mentoring.shikshalokam.org
    
    # Big blue button base url
    BIB_BLUE_BUTTON_BASE_URL = /bigbluebutton/
    
    # Meeting end callback events end point
    MEETING_END_CALLBACK_EVENTS = https%3A%2F%2Fdev.elevate-apis.shikshalokam.org%2Fmentoring%2Fv1%2Fsessions%2Fcompleted
    
    # Big blue button secret key
    BIG_BLUE_BUTTON_SECRET_KEY = n
    
    # Big blue button recording ready callback url
    RECORDING_READY_CALLBACK_URL = http%3A%2F%2Flocalhost%3A3000%2F%3FmeetingID%3Dmeet123
    
    # Enable logging of network request
    ENABLE_LOG = true
    
  4. Start MongoDB locally

    Based on your host operating system and method used, start MongoDB.

  5. Install Npm packages

    ELEVATE/mentoring/src$ npm install
    
  6. Start Mentoring server

    ELEVATE/mentoring/src$ npm start
    
  7. To set scheduler service job

    Run the schedulerScript file from the scripts directory:

    ELEVATE/mentoring/src/scripts$ node schedulerScript.js
    

Tech stack

  • Node - 16.0.0
  • Kafka - 3.1.0
  • Jest - 28.1.1
  • MongoDB - 4.1.4
  • Redis - 7.0.0
Uses MongoDB v4.1.4, which has an OSI Compliant License (GNU Affero General Public License, version 3)
MongoDB v4.1.4 repository: https://github.com/mongodb/mongo/tree/r4.1.4
MongoDB v4.1.4 License: https://github.com/mongodb/mongo/blob/r4.1.4/LICENSE-Community.txt

Scripts

Scheduler

To run the scheduler scripts

cd src/scripts
node schedulerScript.js

We have a dedicated scheduler service running.

Migrations Commands

Check migrations

npm run elevate-migrations s

Create migrations

npm run elevate-migrations create categoryEntity #Where categoryEntity is the file name.
20220726145008-categoryEntity.js

We have followed the following structure for migration files to reduce code duplication.

let categories = [
	{
		value: 'sqaa',
		label: 'SQAA',
		image: 'entity/SQAA.jpg',
	},
	{
		value: 'communication',
		label: 'Communication',
		image: 'entity/Communication.png',
	},
    ...
]
var moment = require('moment')

module.exports = {
	async up(db) {
		global.migrationMsg = 'Uploaded categories entity'
		let entityData = []
		categories.forEach(async function (category) {
			category['status'] = 'ACTIVE'
			category['deleted'] = false
			category['type'] = 'categories'
			category['updatedAt'] = moment().format()
			category['createdAt'] = moment().format()
			category['createdBy'] = 'SYSTEM'
			category['updatedBy'] = 'SYSTEM'
			entityData.push(category)
		})
		await db.collection('entities').insertMany(entityData)
	},

	async down(db) {
		db.collection('entities').deleteMany({
			value: { $in: categories.map((category) => category.value) },
		})
	},
}

Run migrations

npm run elevate-migrations up

Down migrations

npm run elevate-migrations down

To know more about migrations refer project Wiki

Run tests

Integration tests

npm run test:integration

To know more about integration tests and their implementation refer to the project Wiki.

Unit tests

npm test

Dependencies

This project is depended on a user , notification and scheduler service. Set up these services using the setup guide. You're free to use any micro-service that is optimal for the use case. You can learn more about the full implementation of MentorEd here . The frontend/mobile application repo.

Team

Open Source Dependencies

Several open source dependencies that have aided Mentoring's development:

NodeJS MongoDB Apache Kafka Redis Jest Git

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 99.9%
  • Other 0.1%