Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Purpose :

  • Design for Experiment API's to populate,list,delete the experiment definition
  • Design the experiment definition metadata schema
  • Design Data product design to populate experiment data for the product  to map  the users/devices to experiments

Design Flow :

Image Removed

Image Added Experiment

...

API :

...

Experiment Data Product :

Purpose

  • To compute the user experiment mapping based on the experiment criteria and save it to elastic search

Inputs

  • Experiment_Definition Cassandra Table
  • Experiment Criteria Config

User Criteria Config

...

languagejs
themeRDark
titleUserCriteriaConfig

...

CREATE API  :

URL :  POST  /experiment/create

Input :

Sample User Criteria Input Request:

Code Block
themeRDark
titleUserType Request Body
  "request": {
    "expId": "U1234",                  // Unique Id for Experiment
    "name": "USER_ORG",                // Name for Experiment
    "createdBy": "User1",              // Name of the user who created this experiment
    "description": "Experiment to get users to explore page ",  // Short Description about the experiment
    "criteria": {                      // Criteria for the Experiment
      "type": "user",                  // Type of the Criteria
      "filters": {                     // PLEASE refer this link for user search filters- http://docs.sunbird.org/latest/apis/userapi/#operation/Search%20User
        "organisations.orgName": ["sunbird"] // List of Values
      }
    },
    "data" : {                         // Experiment Data 
      "startDate" : "2019-08-01",      // Start date of the Experiment
      "endDate" : "2019-08-02",        // End date of the Experiment
      "key" : "/org/profile",          // Experiment Key
      "client" : "portal"              // name of the client (app/portal/desktop)  
    }
  }


Device Criteria Input Request:

Code Block
themeRDark
titleDeviceType Criteria Request Body
  "request": {
    "expId": "D1234",                  // Unique Id for Experiment
    "name": "Device_STATE_AP",         // Name for Experiment
    "createdBy": "User2",              // Name of the user who created this experiment
    "description": "Experiment to get devices with state = AndhraPradesh",  // Short Description about the experiment
    "criteria": {                      // Criteria for the Experiment
      "type": "userdevice",             "channel": "app/portal/desktop",
   // Type of the Criteria 
      "filters": [
		{                     // Array of Filters
        "name": "state",               // state field critera
        "operator": "IN",              // Filter Operator  - Supported Filters : [IN,EQ] 
        "requestvalue": ["Karnataka"]         // List of Values
        },
		{              "filters": {      
        "name": "city",               // city field critera
        "organisations.orgNameoperator": ["IN",              // Filter Operator  - Supported Filters : [IN,EQ] 
        "value": ["sunbirdBangalore"]         // List of Values
     ],   },
		{                    
          "framework.boardname": ["first_access",     // device field criteria
          "CBSE"operator": "RANGE",        // Filter Operator  -  Supported Filters : [RANGE,LT] 
          "value": {
       }     "start": "2019-02-10",
    }         }"end": "2019-02-20"
        }
     ]
    },
    "data" : {    // Experiment Data 
 "exp_id": {
      "startDate" : "2019-08-01",      // Start date of the Experiment
      "criteriaendDate" : {
    "2019-08-02",        // End date of the Experiment
      "typekey" : "user3fksjfksdlfj",          // Experiment Key
      "channelclient" :  "app"                // name of the client (app/portal/desktop)
    }
  }

Device Filter Criteria  :

Output :

  • Process the request and save the request parameters to Experiment-Definition Cassandra Table with status "SUBMITTED"
  • Response : "Experiment Submitted Sucessfully "

Note :

  • All fields are mandatory
  • Same Experiment will not be allowed to submit again unless the status of the experiment is FAILED
  • If the experiment is submitted more than once , will send a response "Experiment already submitted"

GET API 

URL :  GET  /experiment/:id

Request Params :  ExperimentId

Repsonse :  Experiment Details for the respective experiment Id

Sample Response :

Code Block
themeRDark
titleSample Get API ReSposne
{
  "expId": "U1234",
  "expName": "USER_ORG",
   "request"expDescription": "Experiment to get users with orgname = sunbird",
  "expData": {
    "startDate": "2019-08-01",
    "endDate": "2019-08-04",
    "key": "filters"/org/profile"
  },
  "createdBy": "User1",
  "updatedBy": "ExperimentDataProduct",
  "udpatedOn": "2019-08-02 19:00:00",
  "createdOn": "2019-08-01 10:00:00",
  "criteria": {
    "type": "user",
    "filter": {
      "emailVerifiedorganisations.orgName": true[
        "sunbird"
   }   ]
    }
  },
  "status": "active",
  "status_msg": "Experiment is actively }
 mapped",
  "stats": {
    }"usersMatched": 234,
    }"devicesMatched": 0
  ]}
}

Note : Currently all the filters are included as "AND" condition

Device Criteria Config

Code Block
languagejs


GET LIST  API  :

URL :  GET  /experiment/list

Output :  List of all Experiments

Sample Response :

{ "exp_id": {
Code Block
themeRDark
titleDeviceCriteriaConfig
Sample Reponse Experiment List
collapsetrue
{
  "experiments": [
    {
      "expId": "D1234",
      "expName": "DEVICE_STATE_ANDHRAPRADESH",
      "expDescription": "Experiment to get deviceids with first_access Sep1st to Sep3rd",
      "expData": {
        "criteriastartDate": { "2019-08-01",
        "typeendDate": "device2019-08-04",
        "channelkey": "app/portalorg/desktop"profile"
      },
      "requestcreatedBy": {
  "User6",
      "updatedBy": "ExperimentDataProduct",
      "filtersudpatedOn": [
"2019-08-02 19:00:00",
      "createdOn": "2019-07-04 10:00:00",
      "criteria": {
        "type": "device",
        "filter": {
          "name": "state",first_access",
          "operator": "RANGE",
          "value": {
            "operatorstart": "IN",2019-02-10",
            "end": "2019-02-20"
          }
        }
      },
      "valuestatus": ["FAILED",
      "status_msg": "Devices Not Found matching the Criteria",
      "Karnatakastats": {
        "usersMatched": 0,
        "devicesMatched": 0
]      }
    },
    {
      "expId": "U1234",
      "expName": "USER_ORG",
      "expDescription": "Experiment to get users with orgname = sunbird",
      "expData": {
        "startDate": "2019-08-01",
  "name      "endDate": "first_access",2019-08-04",
        "key": "/org/profile"
        "client": "app"
      },
      "operatorcreatedBy": "GTUser1",
      "updatedBy": "ExperimentDataProduct",
      "valueudpatedOn": "2019-08-02 19:00:00",
      "createdOn": "2019-07-17"08-01 10:00:00",
      "criteria": {
        "type": "user",
        "filter": {
          "organisations.orgName": [
          }  "sunbird"
          ]
        }
      },
      "status": "active",
      "status_msg": "Experiment is actively mapped",
      "stats": {
        "usersMatched": 234,
        "devicesMatched": 0
      }
    }
  ]
}


Experiment Definition Schema:


FieldtypeDescription
1expIdStringunique id for experiment
2expNameStringname of the experiment
3expDescriptionStringdescirption of the experiment

expDataMap<String,String>

Experiment Data

  • startDate  - start date of the experiment
  • endDate - end date of the experiment
  • key/url  -  key or url of the experiment
  • modulus - mod number of the experiment
  • client - Name of the client for the experiment
5createdByStringname of the user who created the experiment
6updatedByStringname of product that last updated the experiment
7udpatedOnTimestamplast udpated date by the source
8createdOnTimestampcreated date for the experiment
9criteria

...

Map<String,String>

criteria of the experiment

  • type  - Type of Criteria (user/device)
  • filters - Array of Filters
10statusStringstatus of the experiment(SUBMITTED/PROCESSING/ACTIVE/FAILED/STOPPED/INACTIVE)
11status_messageStringstatus description of the experiment
12statsMap<String,Long>

Statistic Data

  • usersMatched
  • devicesMatched


Experiment Data Product :

Purpose

  • To compute the user/device experiment mapping based on the experiment criteria and save it to elastic search

Input:

  • Experiment_Definition Cassandra Table

Output 

User experiment mapping  index to elastic search

...