Project

General

Profile

« Previous | Next » 

Revision 52006

create usageStats-report-results page

View differences:

modules/uoa-repository-dashboard-gui/trunk/app/pages/metrics/metrics.module.ts
11 11
import { MetricsShowComponent } from './metrics-show.component';
12 12
import { TabsModule } from 'ngx-bootstrap';
13 13
import {MetricsUsagestatsComponent} from "./metrics-usagestats.component";
14
import { MetricsUsagestatsReportResultsComponent } from './metrics-usagestats-report-results.component';
14 15

  
15 16
@NgModule ({
16 17
  imports: [
......
24 25
    MetricsEnableComponent,
25 26
    MetricsInstructionsComponent,
26 27
    MetricsShowComponent,
27
    MetricsUsagestatsComponent
28
    MetricsUsagestatsComponent,
29
    MetricsUsagestatsReportResultsComponent
28 30
  ]
29 31
})
30 32

  
modules/uoa-repository-dashboard-gui/trunk/app/pages/metrics/metrics.routing.ts
9 9
import { AuthGuardService } from '../../services/auth-guard.service';
10 10
import { MetricsShowComponent } from './metrics-show.component';
11 11
import {MetricsUsagestatsComponent} from "./metrics-usagestats.component";
12
import { MetricsUsagestatsReportResultsComponent } from './metrics-usagestats-report-results.component';
12 13

  
13 14
const metricsRoutes: Routes = [
14 15
    {
......
30 31
    {
31 32
      path: 'usagestats/:id',
32 33
      component: MetricsUsagestatsComponent
34
    },
35
    {
36
      path: 'usagestats-report-results',
37
      component: MetricsUsagestatsReportResultsComponent
33 38
    }
34 39
];
35 40

  
modules/uoa-repository-dashboard-gui/trunk/app/pages/metrics/metrics-usagestats-report-results.component.html
1
<div class="uk-section-default uk-section uk-section-small uk-padding-remove-bottom" style="min-height: 325px">
2

  
3
  <!-- MARGIN-TOP  -->
4
  <div class="uk-sticky-placeholder" style="height: 84px; margin: 0px;" aria-hidden="true"></div>
5
  <div class="uk-container">
6

  
7
    <div class="uk-grid-margin uk-grid uk-grid-stack" uk-grid="">
8
      <div class="uk-width-1-1@m uk-first-column">
9

  
10
        <h1 class="uk-h2">Get usage statistics report</h1>
11

  
12
        <!-- TOP HELP CONTENT -->
13
        <help-content #topHelperContent [position]="'top'"
14
                      [ngClass]="topHelperContent.isPresent()?'uk-margin-medium-top uk-margin-medium-bottom':'clear-style'">
15
        </help-content>
16

  
17
        <div class="uk-container uk-margin-medium-top uk-margin-medium-bottom">
18
          <div class="uk-grid">
19

  
20
            <!-- LEFT HELP CONTENT -->
21
            <aside-help-content #leftHelperContent [position]="'left'"
22
                                [ngClass]="leftHelperContent.isPresent()?'tm-sidebar uk-width-1-4@m uk-first-column':'clear-style'">
23
            </aside-help-content>
24

  
25
            <!-- MIDDLE -->
26
            <div class=" uk-width-expand@m" style="min-height:500px;">
27

  
28
              <div *ngIf="errorMessage" class="uk-alert uk-alert-warning">{{errorMessage}}</div>
29
              <div *ngIf="repoResponse" class="uk-margin-top">
30
                <h3>Report Results</h3>
31
              </div>
32

  
33
            </div>
34

  
35
            <!-- RIGHT HELP CONTENT -->
36
            <aside-help-content #rightHelperContent [position]="'right'"
37
                                [ngClass]="rightHelperContent.isPresent()?'tm-sidebar uk-width-1-4@m uk-first-column':'clear-style'">
38
            </aside-help-content>
39

  
40
          </div>
41
        </div>
42

  
43

  
44
        <!-- BOTTOM HELP CONTENT -->
45
        <help-content #bottomHelperContent [position]="'bottom'"
46
                      [ngClass]="bottomHelperContent.isPresent()?'uk-margin-medium-top uk-margin-medium-bottom':'clear-style'">
47
        </help-content>
48

  
49

  
50
      </div>
51
    </div>
52
  </div>
53
</div>
54

  
modules/uoa-repository-dashboard-gui/trunk/app/pages/metrics/metrics-usagestats-report-results.component.ts
1
import { Component, OnInit } from '@angular/core';
2
import { ActivatedRoute } from '@angular/router';
3
import { Http, RequestOptions, Headers } from '@angular/http';
4
import { AuthenticationService } from '../../services/authentication.service';
5
import { UsagestatsService } from '../../services/usagestats.service';
6
import { ReportResponse } from '../../domain/usageStatsClasses';
7

  
8
@Component({
9
  selector: 'metrics-usagestats-report-results',
10
  templateUrl: 'metrics-usagestats-report-results.component'
11
})
12
export class MetricsUsagestatsReportResultsComponent implements OnInit {
13

  
14
  errorMessage: string;
15
  repoResponse: ReportResponse;
16

  
17
  constructor(private route: ActivatedRoute,
18
              private authService: AuthenticationService,
19
              private usageService: UsagestatsService) {}
20

  
21
  ngOnInit() {
22
    this.getReportResponse();
23
  }
24

  
25
  getReportResponse() {
26
    let headers = new Headers({ 'Content-Type': 'application/json' });
27
    let httpOptions = new RequestOptions({ headers: headers });
28
    let params = new URLSearchParams();
29

  
30
    this.route.queryParams.subscribe( qparams => {
31
      if (qparams['pretty']) {
32
        params.append('Pretty', 'Pretty');
33
      }
34
      params.append('Report', qparams['report']);
35
      params.append('Release', '4');
36
      params.append('RequestorID', this.authService.getUserEmail());
37
      params.append('BeginDate', qparams['beginDate']);
38
      params.append('EndDate', qparams['endDate']);
39
      params.append('RepositoryIdentifier', qparams['repoId']);
40
      params.append('ItemIdentifier', qparams['itemIdentifier']);
41
      params.append('Granularity', qparams['granularity']);
42
    });
43

  
44
    this.usageService.getReportResponse(params).subscribe(
45
      responseWrapper => {
46
        this.repoResponse = responseWrapper.ReportResponse
47
      },
48
      error => {
49
        this.errorMessage = 'Failed to load the report results!';
50
      }
51
    );
52

  
53
  }
54
}
modules/uoa-repository-dashboard-gui/trunk/app/pages/metrics/metrics-show.component.html
7 7
    <div class="uk-grid-margin uk-grid uk-grid-stack" uk-grid="">
8 8
      <div class="uk-width-1-1@m uk-first-column">
9 9

  
10
        <h1 class="uk-h2">Metrics</h1>
10
        <h1 class="uk-h2">{{ piwik ? piwik.repositoryName : 'Metrics'}}</h1>
11 11

  
12 12
        <!-- TOP HELP CONTENT -->
13 13
        <help-content #topHelperContent [position]="'top'"
modules/uoa-repository-dashboard-gui/trunk/app/pages/metrics/metrics-usagestats.component.ts
16 16

  
17 17
  repo: Repository;
18 18
  repoId: string;
19
  shownRepoId: string;
20
  shownOpenaireId: string;
19 21
  issnToShow: string = '';
20 22
  chosen_report: string;
21 23
  disable_report_choice: boolean;
......
31 33
  constructor(private repoService: RepositoryService, private route: ActivatedRoute, private router: Router, private authService: AuthenticationService) {}
32 34

  
33 35
  ngOnInit() {
34
    this.repoId = this.route.snapshot.paramMap.get('id');
36
    this.getRepoId();
35 37
    this.getUserEmail();
36 38
    this.getRepo();
37 39
  }
38 40

  
41
  getRepoId() {
42
    this.repoId = this.route.snapshot.paramMap.get('id');
43
    this.shownRepoId = this.convertToDisplayedFormat(this.repoId);
44
    console.log(`shownRepoId is ${this.repoId}`);
45
  }
46

  
47
  convertToDisplayedFormat(input: string) {
48
    const tempArray = this.repoId.split('____::');
49
    return tempArray[0] + ':' + tempArray[1];
50
  }
51

  
39 52
  onChooseReport(event: any) {
40 53
    this.chosen_report = event.target.value;
41 54
    console.log('chosen report is', this.chosen_report);
......
54 67
        this.errorMessage = 'The repository could not be retrieved';
55 68
      },
56 69
      () => {
70
        this.shownOpenaireId = this.convertToDisplayedFormat(this.repo.piwikInfo.openaireId);
57 71
        if (this.repo.issn){
58 72
          this.issnToShow = this.repo.issn.slice(0, 4)+ '-' + this.repo.issn.toString().slice(4);
59 73
        }
......
86 100
  }
87 101

  
88 102
  goToReport() {
89
    let params = new URLSearchParams();
90

  
103
/*    let params = new URLSearchParams();
91 104
    if (this.pretty) {
92 105
      params.append('Pretty', 'Pretty');
93 106
    }
......
96 109
    params.append('RequestorID', this.userEmail);
97 110
    params.append('BeginDate', this.beginDate);
98 111
    params.append('EndDate', this.endDate);
99
    params.append('RepositoryIdentifier', this.repoId);
112
    params.append('RepositoryIdentifier', this.shownRepoId);
100 113
    params.append('ItemIdentifier', this.itemIdentifier);
101 114
    params.append('Granularity', this.granularity);
102 115
    let url = `http://beta.services.openaire.eu/usagestats/sushilite/GetReport/?${params}`;
103
    window.open(url,"_blank");
116
    window.open(url,"_blank");*/
117

  
118
    this.router.navigate(['usagestats-report-results'], {
119
      queryParams: {
120
        report: this.chosen_report,
121
        beginDate: this.beginDate,
122
        endDate: this.endDate,
123
        repoId: this.shownRepoId,
124
        itemIdentifier: this.itemIdentifier,
125
        granularity: this.granularity,
126
        pretty: this.pretty
127
      }
128
    })
104 129
  }
105 130

  
106 131
}
modules/uoa-repository-dashboard-gui/trunk/app/pages/compatibility/compatibility-validation-history.component.html
93 93
                    </a>
94 94
                  </li>
95 95
                </ul>
96
                <div class="resultsPageLabel">page {{ currentPage+1 }} of {{ totalPages }}</div>
96
                <div class="resultsPageLabel">page {{ (totalPages > 0) ? currentPage+1 : 0 }} of {{ totalPages }}</div>
97 97
              </div>
98 98
              <div>
99 99
                <div>
......
177 177
                    </a>
178 178
                  </li>
179 179
                </ul>
180
                <div class="resultsPageLabel">page {{ currentPage+1 }} of {{ totalPages }}</div>
180
                <div class="resultsPageLabel">page {{ (totalPages > 0) ? currentPage+1 : 0 }} of {{ totalPages }}</div>
181 181
              </div>
182 182
            </div>
183 183
            <div class="row"></div>
modules/uoa-repository-dashboard-gui/trunk/app/pages/content/content-events-of-repo-eventslist.component.html
65 65
                <!--<div class="resultsPageLabel">page {{ eventsPage.currPage+1 }} of {{ eventsPage.totalPages }}</div>-->
66 66

  
67 67
                <!-- DELETE WHEN ADVANCED SHOW EVENTS IS FIXED AND SENDS CORRECT VALUE FOR CURRENT PAGE -->
68
                <div class="resultsPageLabel">page {{ currentPage+1 }} of {{ eventsPage.totalPages }}</div>
68
                <div class="resultsPageLabel">page {{ (eventsPage.totalPages > 0) ? currentPage+1 : 0 }} of {{ eventsPage.totalPages }}</div>
69 69

  
70 70
              </div>
71 71
              <div *ngFor="let event of eventsPage.values" class="events-list">
......
235 235
                <!--<div class="resultsPageLabel">page {{ eventsPage.currPage+1 }} of {{ eventsPage.totalPages }}</div>-->
236 236

  
237 237
                <!-- DELETE WHEN ADVANCED SHOW EVENTS IS FIXED AND SENDS CORRECT VALUE FOR CURRENT PAGE -->
238
                <div class="resultsPageLabel">page {{ currentPage+1 }} of {{ eventsPage.totalPages }}</div>
238
                <div class="resultsPageLabel">page {{ (eventsPage.totalPages > 0) ? currentPage+1 : 0 }} of {{ eventsPage.totalPages }}</div>
239 239

  
240 240
              </div>
241 241
            </div>
modules/uoa-repository-dashboard-gui/trunk/app/pages/content/content-notifications-of-subscription.component.html
60 60
              <!--<div class="resultsPageLabel">page {{ eventsPage.currPage+1 }} of {{ eventsPage.totalPages }}</div>-->
61 61

  
62 62
              <!-- DELETE WHEN getNotificationsBySubscriptionId IS FIXED AND SENDS CORRECT VALUE FOR CURRENT PAGE -->
63
              <div class="resultsPageLabel">page {{ currentPage+1 }} of {{ eventsPage.totalPages }}</div>
63
              <div class="resultsPageLabel">page {{ (eventsPage.totalPages > 0) ? currentPage+1 : 0 }} of {{ eventsPage.totalPages }}</div>
64 64

  
65 65
            </div>
66 66
            <div *ngFor="let event of eventsPage.values" class="events-list">
......
230 230
              <!--<div class="resultsPageLabel">page {{ eventsPage.currPage+1 }} of {{ eventsPage.totalPages }}</div>-->
231 231

  
232 232
              <!-- DELETE WHEN getNotificationsBySubscriptionId IS FIXED AND SENDS CORRECT VALUE FOR CURRENT PAGE -->
233
              <div class="resultsPageLabel">page {{ currentPage+1 }} of {{ eventsPage.totalPages }}</div>
233
              <div class="resultsPageLabel">page {{ (eventsPage.totalPages > 0) ? currentPage+1 : 0 }} of {{ eventsPage.totalPages }}</div>
234 234

  
235 235
            </div>
236 236
          </div>
modules/uoa-repository-dashboard-gui/trunk/app/services/usagestats.service.ts
1
/*
2
* Created by myrto on 05/11/2018
3
*/
4

  
5

  
6
import { Injectable } from '@angular/core';
7
import { Observable } from 'rxjs/Observable';
8
import 'rxjs/add/operator/map';
9
import { Http, Headers, RequestOptions, Response } from '@angular/http';
10
import { ReportResponseWrapper } from '../domain/usageStatsClasses';
11

  
12

  
13
const headers = new Headers({ 'Content-Type': 'application/json' });
14
const httpOptions = new RequestOptions({ headers: headers });
15

  
16
@Injectable ()
17
export class UsagestatsService {
18
  /*private apiUrl = `${apiUrl}/piwik/`;*/
19
  private apiUrl = process.env.API_ENDPOINT + '/piwik/';
20

  
21
  constructor(private http: Http) { }
22

  
23

  
24
  getReportResponse(params: URLSearchParams): Observable<ReportResponseWrapper> {
25
    let url = `http://beta.services.openaire.eu/usagestats/sushilite/GetReport/?${params}`;
26
    console.log(`knocking on: ${url}`);
27
    httpOptions.withCredentials = true;
28
    return this.http.get(url, httpOptions)
29
      .map(res => <ReportResponseWrapper>res.json())
30
      .catch(this.handleError);
31
  }
32

  
33
  private handleError(error: Response | any) {
34
    // In a real world app, we might use a remote logging infrastructure
35
    // We'd also dig deeper into the error to get a better message
36
    let errMsg = "";
37
    console.log('E R R O R !!!');
38
    console.log(error);
39
    if (error instanceof Response) {
40
      const body = error.text() || '';
41
      //const err = body.error || JSON.stringify(body);
42
      errMsg = `${error.status} - ${error.statusText || ''} ${body}`;
43
    } else {
44
      errMsg = (error.message) ? error.message :
45
        error.status ? `${error.status} - ${error.statusText}` : 'Server error';
46
      console.error(errMsg); // log to console instead
47
    }
48
    return Observable.throw(errMsg);
49
  }
50

  
51

  
52
}
modules/uoa-repository-dashboard-gui/trunk/app/domain/tempAPI.ts
1 1
/* export const apiUrl = 'http://195.134.66.230:8380/uoa-repository-manager-service'; */
2 2
/* export const apiUrl = 'http://194.177.192.121:8380/uoa-repository-manager-service';*/
3
export const apiUrl = 'http://194.177.192.121:8380/repomanager-service-dev';
3
/*export const apiUrl = 'http://194.177.192.121:8380/repomanager-service-dev';*/
4
export const apiUrl = 'http://aleka.athenarc.gr:8380/repomanager-service-dev';
4 5
/*export const apiUrl = 'http://195.134.66.230:8380/repomanager-service-dev';*/
5
export const loginUrl = 'http://194.177.192.121:8380/repomanager-service-dev/openid_connect_login';
6
/*export const loginUrl = 'http://194.177.192.121:8380/repomanager-service-dev/openid_connect_login';*/
7
export const loginUrl = 'http://aleka.athenarc.gr:8380/repomanager-service-dev/openid_connect_login';
6 8
/*export const loginUrl = 'http://195.134.66.230:8380/repomanager-service-dev/openid_connect_login';*/
7 9

  
8 10
export const helpServiceUrl = 'http://194.177.192.121:5555';
modules/uoa-repository-dashboard-gui/trunk/app/domain/usageStatsClasses.ts
1
// Generated using typescript-generator version 1.29.366 on 2018-05-11 15:13:15.
2

  
3
export class Contact {
4
  "E-mail": string;
5
  Contact: string;
6
}
7

  
8
export class Customer {
9
  ID: string;
10
  ReportItems: ReportItem[];
11
}
12

  
13
export class Filter {
14
  Name: string;
15
  Value: string;
16
}
17

  
18
export class Filters {
19
  UsageDateRange: UsageDateRange;
20
  Filter: Filter[];
21
  ReportAttribute: Filter[];
22
}
23

  
24
export class Instance {
25
  MetricType: string;
26
  Count: string;
27
}
28

  
29
export class ItemIdentifier {
30
  Type: string;
31
  Value: string;
32
}
33

  
34
export class ItemPerformance {
35
  Period: Period;
36
  Category: string;
37
  Instance: Instance[];
38
}
39

  
40
export class Period {
41
  Begin: string;
42
  End: string;
43
}
44

  
45
export class Report {
46
  "@Created": string;
47
  "@Version": string;
48
  "@Name": string;
49
  Vendor: Vendor;
50
  Customer: Customer;
51
}
52

  
53
export class ReportDefinition {
54
  "@Name": string;
55
  "@Release": string;
56
  Filters: Filters;
57
}
58

  
59
export class ReportException {
60
  "@Created": string;
61
  Number: string;
62
  Severity: string;
63
  Message: string;
64
  Data: string;
65
}
66

  
67
export class ReportItem {
68
  ItemIdentifier: ItemIdentifier[];
69
  ItemPublisher: string;
70
  ItemPlatform: string;
71
  ItemDataType: string;
72
  ItemName: string;
73
  ItemPerformance: ItemPerformance[];
74
}
75

  
76
export class ReportResponse {
77
  "@Created": string;
78
  Exception: ReportException[];
79
  Requestor: Requestor;
80
  ReportDefinition: ReportDefinition;
81
  Report: ReportWrapper;
82
}
83

  
84
export class ReportResponseWrapper {
85
  ReportResponse: ReportResponse;
86
}
87

  
88
export class ReportWrapper {
89
  Report: Report;
90
}
91

  
92
export class Requestor {
93
  ID: string;
94
}
95

  
96
export class UsageDateRange {
97
  Begin: string;
98
  End: string;
99
}
100

  
101
export class BaseRepository {
102
}
103

  
104
export class UsageReport extends BaseRepository {
105
}
106

  
107
export class Vendor {
108
  Contact: Contact;
109
  Name: string;
110
}
modules/uoa-repository-dashboard-gui/trunk/app/app.module.ts
26 26
import { MonitorService } from './services/monitor.service';
27 27
import {LandingComponent} from "./pages/landing/landing.component";
28 28
import {DashboardComponent} from "./pages/dashboard/dashboard.component";
29
import { UsagestatsService } from './services/usagestats.service';
29 30

  
30 31

  
31 32
@NgModule({
......
59 60
    PiwikService,
60 61
    RepositoryService,
61 62
    ValidatorService,
63
    UsagestatsService,
62 64
    AuthGuardService,
63 65
    AuthenticationService
64 66
  ],

Also available in: Unified diff