Compare commits
1 Commits
v2.0.0-bet
...
v2.0.0
| Author | SHA1 | Date | |
|---|---|---|---|
| 4d2b903a0f |
@@ -1,116 +0,0 @@
|
|||||||
# Generate Module
|
|
||||||
P2PRC is a great layer of abstraction. This means that in many cases it is not an end product but rather
|
|
||||||
a tool that customized as an end product. An example would be writing your own billing module to monetize
|
|
||||||
the computation power available. The generate module copies the current with the appropriate git histories
|
|
||||||
and keeps only the go files which would be useful to edit. To use the generate module the user will need
|
|
||||||
to have a go compiler present in his computer. Due to the introduction of this module there will 2 releases:
|
|
||||||
|
|
||||||
- Regular Release (Consists of only the build binary and cli command cannot access the generate module)
|
|
||||||
- Developer Release (Consists of important Go files and the cli can access the generate module)
|
|
||||||
|
|
||||||
## How does this work ?
|
|
||||||
|
|
||||||
### [Struct information](https://github.com/Akilan1999/p2p-rendering-computation/blob/9d69aed8ce0fe5273aaff2828f7d51c3d5ac2ce4/generate/generate.go#L19)
|
|
||||||
- ### ```Generate.go```:
|
|
||||||
This file creates a local copy of P2PRC from where the CLI was called from.
|
|
||||||
This go file also does various stuff like instruction of file should be ignored when copying and
|
|
||||||
which of should not be. Now let's understand this. Below is a sample code which does the following:
|
|
||||||
|
|
||||||
```go
|
|
||||||
//----------------------------------------------------------------
|
|
||||||
// Action performed:
|
|
||||||
// - Ensuring main.go file exists
|
|
||||||
// - Skipping all .go files apart from the ones listed above
|
|
||||||
// - Skipping .idea/ directory
|
|
||||||
// - Skipping Makefile file
|
|
||||||
//----------------------------------------------------------------
|
|
||||||
Options.Skip = func(src string) (bool, error) {
|
|
||||||
switch {
|
|
||||||
case strings.HasSuffix(src, "main.go"):
|
|
||||||
return false, nil
|
|
||||||
case strings.HasSuffix(src, ".go"):
|
|
||||||
return true, nil
|
|
||||||
case strings.HasSuffix(src, ".idea"):
|
|
||||||
return true, nil
|
|
||||||
case strings.HasSuffix(src, "Makefile"):
|
|
||||||
return true, nil
|
|
||||||
default:
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Doing the copy
|
|
||||||
err = copy.Copy("<P2PRC folder you want to copy from>", "<PATH to the directory>", Options)
|
|
||||||
```
|
|
||||||
|
|
||||||
Unfortunately currently this will have to be manually edited in the ```Generate.go``` file. When using the generate
|
|
||||||
module the user also creates their own Go module which is the modified version of P2PRC. This means
|
|
||||||
if the 1 modified package is using another modified package then the appropriate import have to be modified
|
|
||||||
in the file where the import is called:
|
|
||||||
|
|
||||||
Ex:
|
|
||||||
```go
|
|
||||||
//Sample Project module name = Test
|
|
||||||
//Package names:
|
|
||||||
//- Test/Genius
|
|
||||||
//- Test/GeGeGenuis
|
|
||||||
//
|
|
||||||
// When we call the generate function with the new project with the module name = MicDrop
|
|
||||||
// The new package name would be:
|
|
||||||
// - MicDrop/Genius
|
|
||||||
// - MicDrop/GeGeGenuis
|
|
||||||
|
|
||||||
// Test/Genius code depends on the package Test/GeGeGenuis
|
|
||||||
import (
|
|
||||||
"Test/GeGeGenuis"
|
|
||||||
)
|
|
||||||
|
|
||||||
// When we create a new module with the copy of the
|
|
||||||
// existing project we need change:
|
|
||||||
import (
|
|
||||||
"MicDrop/GeGeGenuis"
|
|
||||||
)
|
|
||||||
```
|
|
||||||
|
|
||||||
To do this we have built functions which can modify import names in the Go file provided.
|
|
||||||
To customize the use case of your generate module you would need to manually add your own
|
|
||||||
imports which are supposed to be replaced and in which files they are supposed to be replaced
|
|
||||||
in.
|
|
||||||
|
|
||||||
```go
|
|
||||||
// 1.0 - Test/Genius.go -> GeGeGenuis module
|
|
||||||
// a is struct of type NewProject
|
|
||||||
a.FileNameAST = "<path to project to copy from>/Test/Genius.go"
|
|
||||||
// Get AST information of the file
|
|
||||||
err := a.GetASTGoFile()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
// Change the appropriate Go file
|
|
||||||
err = a.ChangeImports("Test/GeGeGenuis", "MicDrop/GeGeGenuis")
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
// Writes the change to the appropriate file
|
|
||||||
err = a.WriteGoAst()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Higher order of execution of ```Generate.go```:
|
|
||||||
1. Copy entire P2PRC project and ignores files which are not meant to be copied
|
|
||||||
2. The folder name will be based on the new project name and the module name based on the new
|
|
||||||
module name provided.
|
|
||||||
3. Modifies the appropriate imports in the project as instructed in the code.
|
|
||||||
4. Creates a commit with the new changes in the new project.
|
|
||||||
|
|
||||||
|
|
||||||
- ### ``` modifyGenerate.go```:
|
|
||||||
This a really simple implementation where we replace the imports
|
|
||||||
in certain files as instructed from ```generate.go```. To do we create an AST (i.e Abstract Syntax tree)
|
|
||||||
from new file we want to change the imports in. AST create a tree structure of expression. To change the
|
|
||||||
import we can just traverse to the appropriate expression and change the value of that expression in
|
|
||||||
the case of modifying imports. This approach is more simple than using templates.
|
|
||||||
|
|
||||||
|
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
Over here we will cover the basic steps to get the server and client side running.
|
Over here we will cover the basic steps to get the server and client side running.
|
||||||
|
|
||||||
## Alpha release install
|
## Latest release install
|
||||||
https://github.com/Akilan1999/p2p-rendering-computation/releases/tag/v1.0.0-alpha
|
https://github.com/Akilan1999/p2p-rendering-computation/releases
|
||||||
|
|
||||||
## Install from Github master branch
|
## Install from Github master branch
|
||||||
|
|
||||||
@@ -65,7 +65,7 @@ USAGE:
|
|||||||
p2prc [global options] command [command options] [arguments...]
|
p2prc [global options] command [command options] [arguments...]
|
||||||
|
|
||||||
VERSION:
|
VERSION:
|
||||||
1.0.0
|
<version no>
|
||||||
|
|
||||||
COMMANDS:
|
COMMANDS:
|
||||||
help, h Shows a list of commands or help for one command
|
help, h Shows a list of commands or help for one command
|
||||||
@@ -78,7 +78,7 @@ GLOBAL OPTIONS:
|
|||||||
--ViewImages value, --vi value View images available on the server IP address [$VIEW_IMAGES]
|
--ViewImages value, --vi value View images available on the server IP address [$VIEW_IMAGES]
|
||||||
--CreateVM value, --touch value Creates Docker container on the selected server [$CREATE_VM]
|
--CreateVM value, --touch value Creates Docker container on the selected server [$CREATE_VM]
|
||||||
--ContainerName value, --cn value Specifying the container run on the server side [$CONTAINER_NAME]
|
--ContainerName value, --cn value Specifying the container run on the server side [$CONTAINER_NAME]
|
||||||
--RemoveVM value, --rm value Stop and Remove Docker container [$REMOVE_VM]
|
--RemoveVM value, --rm value Stop and Remove Docker container (IP:port) accompanied by container ID via --ID or --id [$REMOVE_VM]
|
||||||
--ID value, --id value Docker Container ID [$ID]
|
--ID value, --id value Docker Container ID [$ID]
|
||||||
--Ports value, -p value Number of ports to open for the Docker Container [$NUM_PORTS]
|
--Ports value, -p value Number of ports to open for the Docker Container [$NUM_PORTS]
|
||||||
--GPU, --gpu Create Docker Containers to access GPU (default: false) [$USE_GPU]
|
--GPU, --gpu Create Docker Containers to access GPU (default: false) [$USE_GPU]
|
||||||
@@ -86,10 +86,20 @@ GLOBAL OPTIONS:
|
|||||||
--SetDefaultConfig, --dc Sets a default configuration file (default: false) [$SET_DEFAULT_CONFIG]
|
--SetDefaultConfig, --dc Sets a default configuration file (default: false) [$SET_DEFAULT_CONFIG]
|
||||||
--NetworkInterfaces, --ni Shows the network interface in your computer (default: false) [$NETWORK_INTERFACE]
|
--NetworkInterfaces, --ni Shows the network interface in your computer (default: false) [$NETWORK_INTERFACE]
|
||||||
--ViewPlugins, --vp Shows plugins available to be executed (default: false) [$VIEW_PLUGIN]
|
--ViewPlugins, --vp Shows plugins available to be executed (default: false) [$VIEW_PLUGIN]
|
||||||
--TrackedContainers, --tc View containers which have been created from the client side (default: false) [$TRACKED_CONTAINERS]
|
--TrackedContainers, --tc View (currently running) containers which have been created from the client side (default: false) [$TRACKED_CONTAINERS]
|
||||||
--ExecutePlugin value, --plugin value Plugin which needs to be executed [$EXECUTE_PLUGIN]
|
--ExecutePlugin value, --plugin value Plugin which needs to be executed [$EXECUTE_PLUGIN]
|
||||||
|
--CreateGroup, --cgroup Creates a new group (default: false) [$CREATE_GROUP]
|
||||||
|
--Group value, --group value group flag with argument group ID [$GROUP]
|
||||||
|
--Groups, --groups View all groups (default: false) [$GROUPS]
|
||||||
|
--RemoveContainerGroup, --rmcgroup Remove specific container in the group (default: false) [$REMOVE_CONTAINER_GROUP]
|
||||||
|
--RemoveGroup value, --rmgroup value Removes the entire group [$REMOVE_GROUP]
|
||||||
|
--Generate value, --gen value Generates a new copy of P2PRC which can be modified based on your needs [$GENERATE]
|
||||||
|
--ModuleName value, --mod value New go project module name [$MODULENAME]
|
||||||
|
--PullPlugin value, --pp value Pulls plugin from git repos [$PULLPLUGIN]
|
||||||
|
--RemovePlugin value, --rp value Removes plugin [$REMOVEPLUGIN]
|
||||||
--help, -h show help (default: false)
|
--help, -h show help (default: false)
|
||||||
--version, -v print the version (default: false)
|
--version, -v print the version (default: false)
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
@@ -209,12 +219,6 @@ This feature is still Under Development:
|
|||||||
- Ansible:
|
- Ansible:
|
||||||
- Debian/ubuntu: ```sudo apt install ansible```
|
- Debian/ubuntu: ```sudo apt install ansible```
|
||||||
- Others: [Installation link](https://ansible-tips-and-tricks.readthedocs.io/en/latest/ansible/install/)
|
- Others: [Installation link](https://ansible-tips-and-tricks.readthedocs.io/en/latest/ansible/install/)
|
||||||
|
|
||||||
#### Set ansible host_key_checking to false
|
|
||||||
- On linux
|
|
||||||
- ```sudo nano /etc/ansible/ansible.cfg```: Open the following file. If this file is not found then where
|
|
||||||
ever the file ```ansible.cfg``` is located.
|
|
||||||
- Add or uncomment ```host_key_checking = False```
|
|
||||||
|
|
||||||
#### Run Test Cases
|
#### Run Test Cases
|
||||||
- Generate Test Case Ansible file
|
- Generate Test Case Ansible file
|
||||||
|
|||||||
@@ -19,10 +19,8 @@ In this repository the P2P module has been designed from sratch at the point of
|
|||||||
|
|
||||||
|
|
||||||
## Responsibility
|
## Responsibility
|
||||||
- To perform speed test to determine best node to connect
|
|
||||||
- To ensure the IP table has nodes which are pingable
|
- To ensure the IP table has nodes which are pingable
|
||||||
- Using techniques such as [UPNP](https://en.wikipedia.org/wiki/Universal_Plug_and_Play). Still under development
|
- Taking to nodes behind NAT. [More about the implementation](NAT-Traversal)...
|
||||||
- Port Forwarding (To be introducted in a future release)
|
|
||||||
|
|
||||||
|
|
||||||
## Note:
|
## Note:
|
||||||
|
|||||||
@@ -23,27 +23,12 @@ path of the IP table json file is received from the configuration module.
|
|||||||
"latency": "<latency>",
|
"latency": "<latency>",
|
||||||
"download": "<download>",
|
"download": "<download>",
|
||||||
"upload": "<upload>"
|
"upload": "<upload>"
|
||||||
"port no": "<server port no>"
|
"port no": "<server port no>",
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Speed Test
|
|
||||||
The speed test functions populate the fields which are latency, download, upload speed. Before the
|
|
||||||
speed test begins for each server IP address. The p2p module ensures that each server IP address
|
|
||||||
is pingable. If the server IP address is not pingable then it removes that IP address from the struct.
|
|
||||||
|
|
||||||
### Latency
|
### Latency
|
||||||
The latency is measured in milliseconds. The route /server_info is called from the
|
The latency is measured in milliseconds. The route /server_info is called from the
|
||||||
server and time it takes to provide a json response is recorded.
|
server and time it takes to provide a json response is recorded.
|
||||||
|
|
||||||
### Download speed
|
|
||||||
The download speed is measured as (<file size>/<time taken to
|
|
||||||
download>)*8. This gives the result in megabits per second. The file downloaded is a 50 mb
|
|
||||||
auto generated file.
|
|
||||||
|
|
||||||
### Upload speed
|
|
||||||
The upload speed is measured as (<file size>/<time taken to upload>)*8. This
|
|
||||||
gives the results in megabits per second. The file uploaded is a 50 mb auto generated file.
|
|
||||||
The route /upload is called from the server side to upload the file.
|
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
# Problems in implementation
|
|
||||||
|
|
||||||
### Number of Devices in the network:
|
|
||||||
The current implementation has the major flaw which is that
|
|
||||||
the server has to be in port 8088 to detected in the public
|
|
||||||
network. As we know most personal networks have a single IP
|
|
||||||
address. This means we cannot have duplicate ports. A fix can
|
|
||||||
be to mention the open port on the IP table file.
|
|
||||||
(Ex: Possible feild to be added)
|
|
||||||
```
|
|
||||||
{
|
|
||||||
"ip_address": [
|
|
||||||
{
|
|
||||||
"ipv4": "localhost",
|
|
||||||
"latency": 14981051,
|
|
||||||
"download": 8142.122540206258,
|
|
||||||
"upload": 3578.766512629995,
|
|
||||||
"port": 8088
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Broadcast of container specs
|
|
||||||
At the moment the container specs are not broadcasted rather
|
|
||||||
just the machines specs and this module has yet to be tested
|
|
||||||
rigorously.
|
|
||||||
|
|
||||||
### Intergration with GPU
|
|
||||||
Certain machines have GPUs present in them which provide a
|
|
||||||
huge advantage for those who want to do rendering and certain
|
|
||||||
sort of computation. The Aim is to only allow it to be compatible
|
|
||||||
with Nvidia. But an better idea would be to provide compatability
|
|
||||||
with multiple GPU providers.
|
|
||||||
|
|
||||||
@@ -3,10 +3,10 @@
|
|||||||
1. [Introduction](Introduction.md)
|
1. [Introduction](Introduction.md)
|
||||||
2. [Installation](Installation.md)
|
2. [Installation](Installation.md)
|
||||||
3. [Abstractions](Abstractions.md)
|
3. [Abstractions](Abstractions.md)
|
||||||
3. [Design Architecture](DesignArchtectureIntro.md)
|
<!-- 3. [Design Architecture](DesignArchtectureIntro.md)
|
||||||
1. [Client Module](ClientArchitecture.md)
|
1. [Client Module](ClientArchitecture.md)
|
||||||
2. [P2P Module](P2PArchitecture.md)
|
2. [P2P Module](P2PArchitecture.md)
|
||||||
3. [Server Module](ServerArchitecture.md)
|
3. [Server Module](ServerArchitecture.md) -->
|
||||||
4. [Implementation](Implementation.md)
|
4. [Implementation](Implementation.md)
|
||||||
1. [Client Module](ClientImplementation.md)
|
1. [Client Module](ClientImplementation.md)
|
||||||
2. [P2P Module](P2PImplementation.md)
|
2. [P2P Module](P2PImplementation.md)
|
||||||
@@ -14,5 +14,5 @@
|
|||||||
4. [Config Module](ConfigImplementation.md)
|
4. [Config Module](ConfigImplementation.md)
|
||||||
5. [Cli Module](CliImplementation.md)
|
5. [Cli Module](CliImplementation.md)
|
||||||
6. [Plugin Module](PluginImplementation.md)
|
6. [Plugin Module](PluginImplementation.md)
|
||||||
5. [Problems](https://github.com/Akilan1999/p2p-rendering-computation/issues)
|
<!-- 5. [Problems](https://github.com/Akilan1999/p2p-rendering-computation/issues) -->
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user