Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ node_js:
- '6.9.4'

install:
- npm install
- npm install -g yarn
- yarn install

before_script:
- export DISPLAY=:99.0
Expand All @@ -18,3 +19,4 @@ script:
branches:
only:
- master
- stable
29 changes: 29 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Version 0.2.0(Beta)
[All items](https://github.com/Azure/BatchLabs/milestone/1?closed=1)

### Features
* Production build [PR 173](https://github.com/Azure/BatchLabs/pull/173)
* Improve the VM size experience to show info about each vm size [PR 277](https://github.com/Azure/BatchLabs/pull/277)
* Load all the VM sizes [PR 275](https://github.com/Azure/BatchLabs/pull/275)
* Load all account on start: improve account selection experience by removing the need to click on the subscription first [PR 273](https://github.com/Azure/BatchLabs/pull/273)
* Creating a new entity will add it to the query cache(i.e. Adding a pool then switching to jobs list then back to pool should still show the added pool in the list) [PR 272](https://github.com/Azure/BatchLabs/pull/272)
* Splash screen show progress [PR 270](https://github.com/Azure/BatchLabs/pull/270)
* Updated application icon [PR 266](https://github.com/Azure/BatchLabs/pull/266)
* Clone entities should keep attributes not in form[PR 262](https://github.com/Azure/BatchLabs/pull/262)
* Added yarn [PR 260](https://github.com/Azure/BatchLabs/pull/260)

### Fixes
* Fix node files `Load more` always showing [PR 268](https://github.com/Azure/BatchLabs/pull/268)

# Version 0.1.0(Beta)

Initial version

### Features
* Login with azure active directory(Giving access to user subscriptions and applications)
* Browse pools, node, jobs, tasks, applications
* Basic creationg of pools, jobs and tasks
* Upload new applications and packages
* Graphs for status of pools(heatmap, nodes availables, running tasks)
* Many error banner helper with quick fixes options(e.g. Task timeout)
* Much more [All closed issues](https://github.com/Azure/BatchLabs/issues?q=is%3Aissue+is%3Aclosed)
34 changes: 22 additions & 12 deletions Readme.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,31 @@
# BatchLabs
[![Build Status](https://travis-ci.org/Azure/BatchLabs.svg?branch=master)](https://travis-ci.org/Azure/BatchLabs)

**Note: this is in early development and there is no production build available.**
**Note: BatchLabs is in beta. We don't provide any installer/packaged binaries as of now. You will need to build this app yourself.**

This is the readme for master branch is contains the latest changes. Stable might be slightly different [Stable readme](https://github.com/Azure/BatchLabs/tree/stable)

## Getting started
**Install node.js version `6.9` or greater.**
#### 1. Prerequisites
- **Install node.js version `6.9` or greater.**
- Install yarn `npm install -g yarn`

Clone the repo `git clone https://github.com/Azure/BatchLabs`
#### 2. Clone the repo
- At stable branch `git clone -b stable https://github.com/Azure/BatchLabs`
- Or for the latest changes `git clone https://github.com/Azure/BatchLabs`

Install the dependencies
```
npm install
#### 3. Install the dependencies
```bash
yarn install
npm install -g gulp (Optional)
```

#### 4. Build and run the application
```bash
npm run build:prod
npm run electron:prod

Run the application
```
# To debug errors
npm run build
npm run electron
```
Expand All @@ -25,18 +34,19 @@ npm run electron
[Dev docs](docs/readme.md)

For developers, you can set up a development environment as follows:
**Use `yarn install` instead of `npm install` this will makes sure everybody has the same exact set of depenencies [Migrating from npm to yarn](https://yarnpkg.com/lang/en/docs/migrating-from-npm/)**

Start the dev server
```
```bash
npm run dev-server
```

Start electron
```
// In the command line
```bash
# In the command line
npm run dev-electron

// In VSCode just press F5
# In VSCode just press F5
```

The dev-server and dev-electron support hot reload for a better development experience. Simply saving a file will cause the UI to refresh to your updated changes.
Expand Down
13 changes: 6 additions & 7 deletions app/app.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import { MdSidenav } from "@angular/material";
import { Observable } from "rxjs";

import {
AccountService, AdalService, CommandService, NodeService, SSHKeyService, SettingsService, SubscriptionService,
AccountService, AdalService, CommandService, NodeService,
SSHKeyService, SettingsService, SubscriptionService, VmSizeService,
} from "app/services";
import AccountCreateDialogComponent from "./components/account/add/account-create-dialog.component";
import { SidebarContentComponent, SidebarManager } from "./components/base/sidebar";

const adalConfig = {
Expand Down Expand Up @@ -38,10 +38,12 @@ export class AppComponent implements AfterViewInit, OnInit {
private accountService: AccountService,
private subscriptionService: SubscriptionService,
private nodeService: NodeService,
private sshKeyService: SSHKeyService) {
private sshKeyService: SSHKeyService,
private vmSizeService: VmSizeService) {
this.settingsService.init();
this.sshKeyService.init();
this.commandService.init();
this.vmSizeService.init();
this.adalService.init(adalConfig);
this.accountService.loadInitialData();

Expand All @@ -68,16 +70,13 @@ export class AppComponent implements AfterViewInit, OnInit {
public ngOnInit() {
this.adalService.login();
this.subscriptionService.load();
this.accountService.load();
}

public open() {
this.sidebar.open();
}

public addAccount() {
this.sidebarManager.open("add-account", AccountCreateDialogComponent);
}

public logout() {
this.adalService.logout();
}
Expand Down
7 changes: 0 additions & 7 deletions app/app.layout.html
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,9 @@
<md-sidenav #rightSidebar align="end">
<bl-sidebar-content #sidebarContent [sidebar]="rightSidebar"></bl-sidebar-content>
</md-sidenav>
<!--[hidden]="!(hasAccount | async)"-->
<div>
<router-outlet></router-outlet>
</div>
<!--<div *ngIf="!(hasAccount | async)" class="no-account">
<md-card (click)="addAccount()">
<i class="fa fa-user fa-lg"></i>
<div>Add a batch account</div>
</md-card>
</div>-->
</md-sidenav-container>
</div>
</section>
Expand Down
122 changes: 23 additions & 99 deletions app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,65 +5,28 @@ import { MaterialModule } from "@angular/material";
import { BrowserModule } from "@angular/platform-browser";
import { RouterModule } from "@angular/router";

// application router
import { routes } from "./app.routes";

// components
import { NodeConnectModule } from "app/components/node/connect";
import { StartTaskModule } from "app/components/pool/start-task";
import { AppComponent } from "./app.component";
import { DeleteAccountDialogComponent } from "./components/account/action/delete-account-dialog.component";
import AccountCreateDialogComponent from "./components/account/add/account-create-dialog.component";
import { AccountBrowseModule } from "./components/account/browse";
import { AccountDetailsHomeComponent } from "./components/account/details/account-details-home.component";
import { AccountDetailsComponent } from "./components/account/details/account-details.component";
import { AccountHomeComponent } from "./components/account/home/account-home.component";
import { ApplicationModule } from "./components/application/application.module";
import { BaseModule } from "./components/base";
import { FileBrowseModule } from "./components/file/browse";
import { FileDetailsModule } from "./components/file/details";
import { FileHomeComponent } from "./components/file/home";
import { JobStatsPreviewComponent } from "./components/job/base/job-stats-preview";
import { JobAdvancedFilterComponent } from "./components/job/browse/filter/job-advanced-filter.component";
import { JobListComponent } from "./components/job/browse/job-list.component";
import { JobDetailsModule } from "./components/job/details";
import { JobHomeComponent } from "./components/job/home/job-home.component";
import { NodeBrowseModule } from "./components/node/browse";
import { NoNodeSelectedComponent, NodeDetailsComponent, NodePropertiesComponent } from "./components/node/details";
import { NodeHomeComponent } from "./components/node/home";
import { PoolNodesPreviewComponent } from "./components/pool/base/pool-nodes-preview.component";
import { PoolAdvancedFilterComponent } from "./components/pool/browse/filter";
import { PoolListComponent } from "./components/pool/browse/pool-list.component";
import { PoolDetailsModule } from "./components/pool/details";
import { PoolGraphsModule } from "./components/pool/graphs";
import { PoolHomeComponent } from "./components/pool/home/pool-home.component";
import { MainNavigationComponent } from "./components/shared/main-navigation.component";
import { TaskBrowseModule } from "./components/task/browse";
import { TaskDetailsModule } from "./components/task/details";
import { TaskHomeComponent } from "./components/task/home";
import { AADUserDropdownComponent } from "./components/user";
import { AppComponent } from "app/app.component";
import { MainNavigationComponent } from "app/components/shared/main-navigation.component";
import { AADUserDropdownComponent } from "app/components/user";

// job actions
import { JobActionModule } from "./components/job/action";
// extenal modules
import { AccountModule } from "app/components/account/account.module";
import { ApplicationModule } from "app/components/application/application.module";
import { BaseModule } from "app/components/base";
import { FileModule } from "app/components/file/file.module";
import { JobModule } from "app/components/job/job.module";
import { NodeModule } from "app/components/node/node.module";
import { PoolModule } from "app/components/pool/pool.module";
import { TaskModule } from "app/components/task/task.module";

// pool actions
import {
DeletePoolDialogComponent,
PoolCreateBasicDialogComponent,
PoolOsPickerComponent,
PoolResizeDialogComponent,
} from "./components/pool/action";

// task actions
import {
DeleteTaskDialogComponent,
RerunTaskFormComponent,
TaskCreateBasicDialogComponent,
TerminateTaskDialogComponent,
} from "./components/task/action";
import { TaskBaseModule } from "./components/task/base";
// unhandled application error handler
import { BatchLabsErrorHandler } from "app/error-handler";

// services
import { BatchLabsErrorHandler } from "app/error-handler";
import {
AccountService,
AdalService,
Expand All @@ -85,17 +48,12 @@ import {
SettingsService,
SubscriptionService,
TaskService,
VmSizeService,
commands,
} from "./services";

const modules = [
AccountBrowseModule,
ApplicationModule,
PoolDetailsModule, PoolGraphsModule, StartTaskModule,
JobDetailsModule, JobActionModule,
TaskBaseModule, TaskDetailsModule, TaskBrowseModule,
NodeBrowseModule, NodeConnectModule,
FileBrowseModule, FileDetailsModule,
AccountModule, ApplicationModule, FileModule, JobModule, NodeModule, PoolModule, TaskModule,
];

@NgModule({
Expand All @@ -104,46 +62,11 @@ const modules = [
],
declarations: [
AADUserDropdownComponent,
AccountCreateDialogComponent,
AccountDetailsComponent,
AccountDetailsHomeComponent,
AccountHomeComponent,
AppComponent,
DeleteAccountDialogComponent,
DeletePoolDialogComponent,
DeleteTaskDialogComponent,
FileHomeComponent,
JobAdvancedFilterComponent,
JobHomeComponent,
JobListComponent,
JobStatsPreviewComponent,
MainNavigationComponent,
NodeDetailsComponent,
NodePropertiesComponent,
NodeHomeComponent,
NoNodeSelectedComponent,
PoolAdvancedFilterComponent,
PoolCreateBasicDialogComponent,
PoolHomeComponent,
PoolListComponent,
PoolNodesPreviewComponent,
PoolOsPickerComponent,
PoolResizeDialogComponent,
RerunTaskFormComponent,
TaskCreateBasicDialogComponent,
TaskHomeComponent,
TerminateTaskDialogComponent,
],
entryComponents: [
AccountCreateDialogComponent,
DeleteAccountDialogComponent,
DeletePoolDialogComponent,
DeleteTaskDialogComponent,
PoolCreateBasicDialogComponent,
PoolResizeDialogComponent,
RerunTaskFormComponent,
TaskCreateBasicDialogComponent,
TerminateTaskDialogComponent,
// imported in specific area modules
],
imports: [
BrowserModule,
Expand All @@ -161,21 +84,22 @@ const modules = [
ApplicationService,
AzureHttpService,
ArmHttpService,
BatchClientService,
CommandService,
ElectronRemote,
ElectronShell,
FileService,
FileSystemService,
HttpUploadService,
JobService,
PoolService,
SubscriptionService,
SSHKeyService,
NodeService,
NodeUserService,
BatchClientService,
PoolService,
SettingsService,
SSHKeyService,
SubscriptionService,
TaskService,
VmSizeService,
{ provide: ErrorHandler, useClass: BatchLabsErrorHandler },
...commands,
],
Expand Down
Loading