GithubHelp home page GithubHelp logo

lukethompsxn / edufuse Goto Github PK

View Code? Open in Web Editor NEW
6.0 2.0 1.0 805 KB

A multi-language, educational, user space file system tool

CMake 0.93% Shell 0.62% C 15.36% Java 48.77% HTML 0.19% JavaScript 15.28% CSS 0.33% Vue 18.52%

edufuse's Introduction

eduFUSE

Maven Central MIT Licence

A multi-language, educational, user space file system tool. This tool is designed to help ease some of the difficulties associated with developing a userspace filesystem. Many of the common setup difficulties have been alleviated, allowing the user to simply implement the file system methods without needing to worry about environment configuration. In addition to this a GUI is provided to help improve visibility and further improve the experience of developing a userspace file system. Whether you are developing your first userspace filesystem, or a seasoned proffesional, we hope eduFUSE can help speedup the development process. eduFUSE currently supports operating systems Linux and macOS, with languages C and Java.

Part IV Honours Project by Luke Thompson and Joel Clarke. Supervised by Dr Robert Sheehan.

Screenshots

Screenshot_2

image

image

image

Getting Started

Firstly, you will need to install fuse, this can be done on linux using sudo apt-get install libfuse-dev. Then, below you will find the general eduFUSE user guide. Guides for Java and GUI can be found at the respective links.

When running your file system, make sure you pass -d -f <mount-point> where <mount-point> is your mount point as program arguments.

Linux

In order to use eduFUSE on a linux system, all you need to do is download the latest release here.

macOS

Please note this is only a beta version so there may be a few hiccups.

In order to use eduFUSE on a macOS system, you first need to install osxfuse. Then download the latest eduFUSE release here.

If you get the error error On Darwin API version 25 or greater must be used (or similar), then you will need to modify the fuse.h header file located at /usr/local/include/osxfuse/fuse/fuse.h. On line 28, modify to FUSE_USE_VERSION to be same as the FUSE_USE_VERSION defined on line 1 of edufuse.c (currently this is 31).

Windows

Currently not supported :'(

C User Guide

Find the C User Guide here.

Java User Guide

Find the Java User Guide here.

GUI User Guide

Find the GUI User Guide here.

Troubleshooting

Basic Troubleshooting can be found here.

Acknowledgements

edufuse's People

Contributors

lukethompsxn avatar joel-clarke avatar

Stargazers

CyberFlame avatar Heath L Campbell avatar Ernest Wong avatar Duke Ho avatar Abhinav Behal avatar Sam Broadhead avatar

Watchers

James Cloos avatar  avatar

Forkers

joel-clarke

edufuse's Issues

Fix dimension and overflow in GUI

Sometimes the GUI tabs are too big and overflow to the scroll. This may be due to opening dev tools on startup but will need investigating.

Some messages missed in GUI

There is a bug where some messages get missed by the GUI because the socket is too slow at processing messages and sometimes takes two messages as a single message, hence resulting in malformed JSON and hence being printed to console rather than passed through.

Write documentation for GUI

Will need to give general user guide for GUI.

Plus specific information for tabs.
For example on the Directory tab we need to explain that it auto-detects changed and what each of the below things actually represent
img

Test all C functions

We need to implement (or find another implemented version) of all C functions to verify correctness.

Implement Charts tab

Currently, we have a chart for the number of system calls, but we need two more charts and finish styling on that tab.

Pre-create all routes on GUI startup

Currently, we have the routes (tabs) updating in the background when changes occur, but only after they have been opened the first time. Clearly, we want to have them displaying all info right from the beginning.

How to test:

  • Start the GUI,
  • Start backend,
  • Open a file in the mounted folder (before you change from overview tab)
  • Ensure data is displayed as expected.

Ensure read and write data is sending the correct info

I believe that the return value is only the status, not the number of bytes read/written. If this is the case then we would not truly be representing the number of bytes read/written. We should be able to get this amount from one of the structs which are passed to the read/write functions.

/** Read data from an open file */
static int edufuse_read(const char *path, char *buf, size_t size, off_t off, struct fuse_file_info *fi) {
    if (is_visualised) {
        send_log("read", path, stringify_fusefileinfo_with_buf_size_off(fi, buf, size, off));
    }

    int out = registered_operations->read(path, buf, size, off, fi);
    if (is_visualised) {
        send_amount_read_write("read", &out);
    }

    return out;
    // return registered_operations->read(path, buf, size, off, fi);
}

Test python version using different fuse version

One possible issue for python may be the fuse version number. I know there was some significant modifications between fuse 2 -> 3 which resulted in osxfuse unable to support fuse 3 so since fusepy was written for fuse 2 maybe we should test using fuse version 2 in edufuse and see if this fixes read and write problem

Test all java functions

We need to implement (or find another implemented version) of all Java functions to ensure correctness.

Add auto-scroll (to bottom) on directory tab

Currently the Output. will auto-scroll when active, however, when navigating away the scroll is back to the top. Ideally, we would like the scroll to be at the bottom when the user comes back to the Directory tab.

Rename send_log to be send_call (or similar)

Since we are now using the edufuse_visualiser function send_log() for both logging and charting, we should rename the function to be send_call() or similar. This can probably be done using find and replace because its used in every function in edufuse.c. This will also require updating the edufuse_visualiser.h file.

In addition to this, we should also update the message type (in the JSON) to be CALL from LOG in the front end, but this will require many changes throughout the system.

This should probably be done after committing and pushing working code as this is fairly high risk and we want to be able to revert if an error occurs.

Please make sure to thoroughly test before pushing code.

Implement Overview tab

Currently we have no Overview tab implemented. This is not required for MVP but ideally we would have some high level overview of the information available on other tabs.

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.