Skip to content

Commit 9afe1f0

Browse files
feat(core): add firestore driver for lumberjack
1 parent 9b30f4a commit 9afe1f0

13 files changed

Lines changed: 667 additions & 52 deletions

File tree

.github/workflows/ci.yml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ jobs:
3939
restore-keys: |
4040
${{ runner.os }}-node-${{ matrix.node-version }}-angular-${{ matrix.angular-version }}-yarn-
4141
- run: yarn install
42-
4342
- run: yarn lint
4443

4544
build:
@@ -72,7 +71,6 @@ jobs:
7271
restore-keys: |
7372
${{ runner.os }}-node-${{ matrix.node-version }}-angular-${{ matrix.angular-version }}-yarn-
7473
- run: yarn install
75-
7674
- run: yarn build:lib
7775
- uses: actions/upload-artifact@v2
7876
with:
@@ -110,7 +108,6 @@ jobs:
110108
restore-keys: |
111109
${{ runner.os }}-node-${{ matrix.node-version }}-angular-${{ matrix.angular-version }}-yarn-
112110
- run: yarn install
113-
114111
- run: yarn test:internal:ci
115112
- run: yarn test:lib:ci
116113

@@ -145,7 +142,6 @@ jobs:
145142
restore-keys: |
146143
${{ runner.os }}-node-${{ matrix.node-version }}-angular-${{ matrix.angular-version }}-yarn-
147144
- run: yarn install
148-
149145
- run: yarn delete-path-alias @ngworker/lumberjack-firestore-driver
150146
- uses: actions/download-artifact@v2
151147
with:
@@ -187,7 +183,6 @@ jobs:
187183
restore-keys: |
188184
${{ runner.os }}-node-${{ matrix.node-version }}-angular-${{ matrix.angular-version }}-yarn-
189185
- run: yarn install
190-
191186
- run: yarn delete-path-alias @ngworker/lumberjack-firestore-driver
192187
- uses: actions/download-artifact@v2
193188
with:

README.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ TODO: Update the features of this driver
7272

7373
LumberjackFirestoreDriver is published as the `@ngworker/lumberjack-firestore-driver` package.
7474

75-
| Toolchain | Command |
76-
| ----------- | -------------------------------------------------- |
75+
| Toolchain | Command |
76+
| ----------- | --------------------------------------------------- |
7777
| Angular CLI | `ng add @ngworker/lumberjack-firestore-driver` |
7878
| NPM CLI | `npm install @ngworker/lumberjack-firestore-driver` |
7979
| Nx CLI | `nx add @ngworker/lumberjack-firestore-driver` |
@@ -84,13 +84,13 @@ LumberjackFirestoreDriver is published as the `@ngworker/lumberjack-firestore-dr
8484
`LumberjackFirestoreDriver` has verified compatibility with the following Angular versions.
8585

8686
| Angular version | lumberjack-firestore-driver support |
87-
| --------------- | --------------------- |
88-
| 11.0.x ||
89-
| 10.2.x ||
90-
| 10.1.x ||
91-
| 10.0.x ||
92-
| 9.1.x ||
93-
| 9.0.x ||
87+
| --------------- | ----------------------------------- |
88+
| 11.0.x | |
89+
| 10.2.x | |
90+
| 10.1.x | |
91+
| 10.0.x | |
92+
| 9.1.x | |
93+
| 9.0.x | |
9494

9595
If the version you are using is not listed, please [raise an issue in our GitHub repository](https://github.com/ngworker/lumberjack-firestore-driver/issues/new).
9696

apps/lumberjack-app/src/app/app.module.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,21 @@ import { BrowserModule } from '@angular/platform-browser';
44
import { LumberjackLevel, LumberjackModule } from '@ngworker/lumberjack';
55
import { LumberjackFirestoreDriverModule } from '@ngworker/lumberjack-firestore-driver';
66

7+
import { environment } from '../environments/environment';
8+
79
import { AppComponent } from './app.component';
810

911
@NgModule({
1012
declarations: [AppComponent],
1113
imports: [
1214
BrowserModule,
1315
LumberjackModule.forRoot(),
14-
LumberjackFirestoreDriverModule.forRoot({ levels: [LumberjackLevel.Verbose], someNeededOption: 'option-value' }),
16+
LumberjackFirestoreDriverModule.forRoot({
17+
levels: [LumberjackLevel.Verbose],
18+
firebaseConfig: environment.firebase,
19+
origin: 'ForestApp',
20+
collectionName: 'forest-app-logs',
21+
}),
1522
],
1623
providers: [],
1724
bootstrap: [AppComponent],
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
11
export const environment = {
22
production: true,
3+
firebase: {
4+
apiKey: 'API_KEY',
5+
authDomain: 'PROJECT_ID.firebaseapp.com',
6+
databaseURL: 'https://PROJECT_ID.firebaseio.com',
7+
projectId: 'PROJECT_ID',
8+
storageBucket: 'PROJECT_ID.appspot.com',
9+
messagingSenderId: 'SENDER_ID',
10+
appId: 'APP_ID',
11+
measurementId: 'G-MEASUREMENT_ID',
12+
},
313
};

apps/lumberjack-app/src/environments/environment.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@
44

55
export const environment = {
66
production: false,
7+
firebase: {
8+
apiKey: 'API_KEY',
9+
authDomain: 'PROJECT_ID.firebaseapp.com',
10+
databaseURL: 'https://PROJECT_ID.firebaseio.com',
11+
projectId: 'PROJECT_ID',
12+
storageBucket: 'PROJECT_ID.appspot.com',
13+
messagingSenderId: 'SENDER_ID',
14+
appId: 'APP_ID',
15+
measurementId: 'G-MEASUREMENT_ID',
16+
},
717
};
818

919
/*

libs/ngworker/lumberjack-firestore-driver/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
"version": "0.0.0",
44
"peerDependencies": {
55
"@angular/core": ">=9.0.7",
6-
"@ngworker/lumberjack": "^2.0.0 || >=2.0.0-beta.0"
6+
"@ngworker/lumberjack": "^2.0.0 || >=2.0.0-beta.0",
7+
"@angular/fire": "^6.0.3"
78
},
89
"dependencies": {
910
"tslib": "^2.0.0"

libs/ngworker/lumberjack-firestore-driver/src/lib/lumberjack-firestore-driver-root.module.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
import { Inject, NgModule, Optional, SkipSelf } from '@angular/core';
1+
import { Inject, NgModule, NgZone, Optional, SkipSelf } from '@angular/core';
22

3+
// tslint:disable-next-line: ordered-imports
4+
import { AngularFirestore, AngularFirestoreModule } from '@angular/fire/firestore';
35
import {
46
LumberjackLogDriverConfig,
57
lumberjackLogDriverConfigToken,
@@ -13,21 +15,24 @@ import {
1315
} from './lumberjack-firestore-driver.config';
1416

1517
export function lumberjackFirestoreDriverFactory(
18+
firestore: AngularFirestore,
1619
logDriverConfig: LumberjackLogDriverConfig,
17-
lumberjackFirestoreDriverConfig: LumberjackFirestoreDriverConfig
20+
lumberjackFirestoreDriverConfig: LumberjackFirestoreDriverConfig,
21+
ngZone: NgZone
1822
): LumberjackFirestoreDriver {
1923
const config: LumberjackFirestoreDriverConfig = {
2024
...logDriverConfig,
2125
...lumberjackFirestoreDriverConfig,
2226
};
2327

24-
return new LumberjackFirestoreDriver(config);
28+
return new LumberjackFirestoreDriver(config, firestore, ngZone);
2529
}
2630

2731
@NgModule({
32+
imports: [AngularFirestoreModule],
2833
providers: [
2934
{
30-
deps: [lumberjackLogDriverConfigToken, lumberjackFirestoreDriverConfigToken],
35+
deps: [AngularFirestore, lumberjackLogDriverConfigToken, lumberjackFirestoreDriverConfigToken, NgZone],
3136
multi: true,
3237
provide: lumberjackLogDriverToken,
3338
useFactory: lumberjackFirestoreDriverFactory,
Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,31 @@
11
import { InjectionToken } from '@angular/core';
22

3+
// tslint:disable-next-line: ordered-imports
4+
import { FirebaseOptions } from '@angular/fire';
35
import { LumberjackLogDriverConfig } from '@ngworker/lumberjack';
46

57
export const lumberjackFirestoreDriverConfigToken: InjectionToken<LumberjackFirestoreDriverConfig> = new InjectionToken(
68
'__LUMBERJACK_FIRESTORE_DRIVER_CONFIG__'
79
);
810

9-
// tslint:disable-next-line: no-empty-interface
1011
export interface LumberjackFirestoreDriverConfig extends LumberjackLogDriverConfig {
11-
someNeededOption: string;
12+
/**
13+
*
14+
* The identifier of the app who emitted the log.
15+
* This is used to organize logs on the log store.
16+
*
17+
*/
18+
origin: string;
19+
20+
/**
21+
*
22+
* The name of collection in Firestore for logs storing
23+
*/
24+
collectionName: string;
25+
26+
/**
27+
*
28+
* The configuration of Firebase application instance
29+
*/
30+
firebaseConfig: FirebaseOptions;
1231
}

libs/ngworker/lumberjack-firestore-driver/src/lib/lumberjack-firestore-driver.module.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import { ModuleWithProviders, NgModule } from '@angular/core';
22

3+
// tslint:disable-next-line: ordered-imports
4+
import { AngularFireModule } from '@angular/fire';
5+
36
import { LumberjackFirestoreDriverRootModule } from './lumberjack-firestore-driver-root.module';
47
import {
58
LumberjackFirestoreDriverConfig,
@@ -13,9 +16,12 @@ export class LumberjackFirestoreDriverModule {
1316
* Pass a full LumberjackFirestoreDriver configuration.
1417
*/
1518
static forRoot(config: LumberjackFirestoreDriverConfig): ModuleWithProviders<LumberjackFirestoreDriverRootModule> {
19+
const firebaseProviders = AngularFireModule.initializeApp(config.firebaseConfig).providers;
20+
1621
return {
1722
ngModule: LumberjackFirestoreDriverRootModule,
1823
providers: [
24+
...(firebaseProviders || []),
1925
{
2026
provide: lumberjackFirestoreDriverConfigToken,
2127
useValue: config,
Lines changed: 54 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,70 @@
1-
import { Inject, Injectable } from '@angular/core';
1+
import { Inject, Injectable, NgZone } from '@angular/core';
22

3-
import { LumberjackLogDriver } from '@ngworker/lumberjack';
3+
// tslint:disable-next-line: ordered-imports
4+
import { AngularFirestore, DocumentReference } from '@angular/fire/firestore';
5+
import { LumberjackLevel, LumberjackLogDriver, LumberjackLogLevel } from '@ngworker/lumberjack';
46

57
import {
68
LumberjackFirestoreDriverConfig,
79
lumberjackFirestoreDriverConfigToken,
810
} from './lumberjack-firestore-driver.config';
911

12+
interface FirestoreCollectionItem {
13+
entry: string;
14+
level: LumberjackLogLevel;
15+
origin: string;
16+
timestamp: number;
17+
}
18+
1019
@Injectable()
1120
export class LumberjackFirestoreDriver implements LumberjackLogDriver {
12-
constructor(@Inject(lumberjackFirestoreDriverConfigToken) public config: LumberjackFirestoreDriverConfig) {}
21+
constructor(
22+
@Inject(lumberjackFirestoreDriverConfigToken) public config: LumberjackFirestoreDriverConfig,
23+
private firestore: AngularFirestore,
24+
private ngZone: NgZone
25+
) {}
26+
27+
logCritical(formattedLog: string): void {
28+
this.log(formattedLog, LumberjackLevel.Critical);
29+
}
30+
31+
logDebug(formattedLog: string): void {
32+
this.log(formattedLog, LumberjackLevel.Debug);
33+
}
34+
35+
logError(formattedLog: string): void {
36+
this.log(formattedLog, LumberjackLevel.Error);
37+
}
1338

14-
logCritical(formattedLog: string): void {}
39+
logInfo(formattedLog: string): void {
40+
this.log(formattedLog, LumberjackLevel.Info);
41+
}
1542

16-
logDebug(formattedLog: string): void {}
43+
logTrace(formattedLog: string): void {
44+
this.log(formattedLog, LumberjackLevel.Trace);
45+
}
1746

18-
logError(formattedLog: string): void {}
47+
logWarning(formattedLog: string): void {
48+
this.log(formattedLog, LumberjackLevel.Warning);
49+
}
1950

20-
logInfo(formattedLog: string): void {}
51+
private log(entry: string, level: LumberjackLogLevel): void {
52+
const { origin } = this.config;
53+
const timestamp = Date.now();
54+
this.sendLogPackage({ entry, level, origin, timestamp })
55+
.then((d) => console.log(d))
56+
.catch((error) => console.error('Package has not been successfully sent.', { error }));
57+
}
2158

22-
logTrace(formattedLog: string): void {}
59+
private sendLogPackage(collectionItem: FirestoreCollectionItem) {
60+
return new Promise<DocumentReference<FirestoreCollectionItem>>((resolve) => {
61+
this.ngZone.runOutsideAngular(() => {
62+
const promise = this.firestore
63+
.collection<FirestoreCollectionItem>(this.config.collectionName)
64+
.add(collectionItem);
2365

24-
logWarning(formattedLog: string): void {}
66+
resolve(promise);
67+
});
68+
});
69+
}
2570
}

0 commit comments

Comments
 (0)